PHP 生成器与迭代器对象
phpserver side programmingprogramming更新于 2025/7/19 3:07:17
简介
当调用生成器函数时,在内部会返回一个新的 Generator 类对象。它实现了 Iterator 接口。迭代器接口定义了以下抽象方法
- Iterator::current — 返回当前元素
- Iterator::key — 返回当前元素的键
- Iterator::next — 前进到下一个元素
- Iterator::rewind — 将迭代器倒退到第一个元素
- Iterator::valid —检查当前位置是否有效
生成器充当只进迭代器对象,并提供可调用来操作生成器状态的方法,包括向其发送值和从其返回值。
生成器作为迭代器
在以下示例中,生成器函数在生成器对象中生成文件中的行,可以使用 oreach 循环遍历该对象。也可以调用迭代器方法,例如 current() 和 next()。但是,由于生成器是只进迭代器,因此调用 rewind() 方法会引发异常
示例
<?php
function filegenerator($name) {
$fileHandle = fopen($name, 'r');
while ($line = fgets($fileHandle)) {
yield $line;
}
fclose($fileHandle);
}
$name="test.txt";
$file=filegenerator($name);
foreach ($file as $line)
echo $line;
$file->rewind();
echo $file->current();
$file->next();
echo $file->current();
?>
输出
遍历文件行后,显示如下所示的致命错误
PHP User Defined Functions PHP Function Arguments PHP Variable Functions PHP Internal (Built-in) Functions PHP Anonymous functions PHP Arrow Functions PHP Fatal error: Uncaught Exception: Cannot rewind a generator that was already run

