php实现迭代器
实现迭代器的基本步骤
在PHP中实现迭代器需要创建一个类并实现Iterator接口。该接口包含五个必须实现的方法:current()、key()、next()、rewind()和valid()。
class MyIterator implements Iterator {
private $position = 0;
private $array = [];
public function __construct($array) {
$this->array = $array;
$this->position = 0;
}
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(['apple', 'banana', 'cherry']);
foreach ($iterator as $key => $value) {
echo "Key: $key, Value: $value\n";
}
实现IteratorAggregate接口
对于更简单的场景,可以实现IteratorAggregate接口,只需实现getIterator()方法返回一个迭代器实例。
class MyCollection implements IteratorAggregate {
private $items = [];
public function addItem($item) {
$this->items[] = $item;
}
public function getIterator() {
return new ArrayIterator($this->items);
}
}
$collection = new MyCollection();
$collection->addItem('one');
$collection->addItem('two');
foreach ($collection as $item) {
echo $item . "\n";
}
生成器作为轻量级迭代器
PHP 5.5+支持生成器,可以用更简洁的方式创建迭代器,使用yield关键字。
function xrange($start, $end, $step = 1) {
for ($i = $start; $i <= $end; $i += $step) {
yield $i;
}
}
foreach (xrange(1, 10) as $number) {
echo "$number ";
}
内置迭代器类
PHP提供了多个内置的迭代器类,如ArrayIterator、FilesystemIterator等,可以直接使用或扩展。
$arrayIterator = new ArrayIterator(['a', 'b', 'c']);
foreach ($arrayIterator as $value) {
echo $value . "\n";
}
注意事项
实现迭代器时需确保所有方法正确维护内部状态。valid()方法应准确反映当前位置是否有效,rewind()应将指针重置到起始位置。对于大型数据集,生成器通常是更好的选择,因为它们不会一次性加载所有数据到内存。







