php实现迭代器
PHP 实现迭代器的方法
在 PHP 中,可以通过实现 Iterator 或 IteratorAggregate 接口来创建自定义迭代器。以下是两种常见的实现方式:
实现 Iterator 接口
Iterator 接口要求实现以下五个方法:

current(): 返回当前元素。key(): 返回当前元素的键。next(): 移动到下一个元素。rewind(): 重置迭代器到第一个元素。valid(): 检查当前位置是否有效。
示例代码:

class MyIterator implements Iterator {
private $position = 0;
private $array = [];
public function __construct(array $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]);
}
}
// 使用示例
$iterator = new MyIterator(['a', 'b', 'c']);
foreach ($iterator as $key => $value) {
echo "$key: $value\n";
}
实现 IteratorAggregate 接口
IteratorAggregate 接口只需实现一个方法 getIterator(),返回一个迭代器实例。这种方式更简洁,适合直接返回内置迭代器(如 ArrayIterator)。
示例代码:
class MyCollection implements IteratorAggregate {
private $items = [];
public function __construct(array $items) {
$this->items = $items;
}
public function getIterator() {
return new ArrayIterator($this->items);
}
}
// 使用示例
$collection = new MyCollection(['x', 'y', 'z']);
foreach ($collection as $item) {
echo "$item\n";
}
选择哪种方式
- 如果需要完全自定义迭代逻辑(如遍历数据库结果或复杂数据结构),实现
Iterator接口更灵活。 - 如果只是包装现有数组或可迭代对象,
IteratorAggregate更简单高效。
两种方式均支持 foreach 循环,并可以与其他 PHP 迭代功能(如 iterator_to_array)兼容。






