小话设计模式之 迭代器(PHP)
程序员文章站
2022-03-27 12:38:04
使用迭代器的方式求出1到10的三次方,并输出,demo如下:start....
使用迭代器的方式求出1到10的三次方,并输出,demo如下:
<?php
/**
* 聚合式迭代器
* 返回一个实现了iterator接口的类的实例
* @author earnest
* */
class NumberCubic implements iteratorAggregate{
private $start,$end;
public function __construct($start,$end)
{
$this->start = $start;
$this->end = $end;
}
/**
* @inheritDoc
*/
public function getIterator()
{
return new NumberCubicIterator($this);
}
public function getStart(){
return $this->start;
}
public function getEnd(){
return $this->end;
}
}
/**
* 迭代器
* @author earnest
* */
class NumberCubicIterator implements Iterator{
private $obj,$cur;
public function __construct($obj)
{
$this->obj = $obj;
}
/**
* @inheritDoc
*/
public function current()
{
return pow($this->cur,3);
}
/**
* @inheritDoc
*/
public function next()
{
$this->cur++;
}
/**
* @inheritDoc
*/
public function key()
{
return $this->cur;
}
/**
* @inheritDoc
*/
public function valid()
{
return $this->cur <= $this->obj->getEnd();
}
/**
* @inheritDoc
*/
public function rewind()
{
$this->cur = $this->obj->getStart();
}
}
$NumberCubicList = new NumberCubic(1,10);
foreach($NumberCubicList as $key => $v){
echo $key.' cubic number is '.$v.'<br/>';
}
执行顺序: NumberCubic构造函数 NumberCubic 的getIterator()方法 NumberCubicIterator构造函数生成NumImp对象 NumImp->rewind() 重新把迭代器执行列表开始处 NumImp->valid() 1 NumImp->current() 2 NumImp->key() 3 NumImp->next() 4 NumImp->valid() 1 NumImp->current() 2 继续循环
本文地址:https://blog.csdn.net/qq_24973351/article/details/109265531