php实现迭代器
实现迭代器的基本步骤
在PHP中实现迭代器需要让类实现Iterator接口。该接口包含五个必须实现的方法:current(), key(), next(), rewind(), valid()。
class MyIterator implements Iterator {
private $position = 0;
private $array = [
"first",
"second",
"third"
];
public function rewind() {
$this->position = 0;
}
public function current() {
return $this->array[$this->position];
}
public function key() {
return $this->position;
}
public function next() {
++$this->position;
}
public function valid() {
return isset($this->array[$this->position]);
}
}
使用示例
创建迭代器实例后,可以直接在foreach循环中使用:

$iterator = new MyIterator();
foreach($iterator as $key => $value) {
echo "$key: $value\n";
}
实现迭代器聚合接口
对于包含多个迭代器的集合类,可以实现IteratorAggregate接口,只需实现getIterator()方法:

class MyCollection implements IteratorAggregate {
private $items = [];
public function addItem($item) {
$this->items[] = $item;
}
public function getIterator() {
return new ArrayIterator($this->items);
}
}
内置迭代器类
PHP提供了一些内置的迭代器类可以直接使用:
ArrayIterator: 数组迭代器DirectoryIterator: 目录迭代器FilesystemIterator: 文件系统迭代器RecursiveIterator: 递归迭代器
$dirIterator = new DirectoryIterator('/path/to/directory');
foreach ($dirIterator as $fileinfo) {
echo $fileinfo->getFilename() . "\n";
}
生成器实现迭代器
PHP 5.5+可以使用生成器(yield)更简单地实现迭代功能:
function xrange($start, $limit, $step = 1) {
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
}
foreach (xrange(1, 10, 2) as $number) {
echo "$number ";
}
这种方法内存效率更高,因为不需要一次性生成所有值。






