生成器::rewind

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

生成器::rewind倒回迭代器

描述

public 生成器::rewind(): void

如果迭代已经开始,这将抛出一个异常。

参数

此函数没有参数。

返回值

不返回值。

添加备注

用户贡献的备注 2 备注

i'm pati on stackoverflow
8 年前
实际上,此方法可用于在迭代之前测试生成器,因为它将执行您的函数,直到第一个 yield 语句。 也就是说,如果您尝试在生成器中读取一个不存在的文件,通常只有在客户端代码 foreach() 的第一次迭代中才会发生错误。 有时,这在预先检查时至关重要。

查看此处修改后的示例
https://php.net/manual/ru/language.generators.overview.php#112985

<?php

function getLines($file) {
$f = fopen($file, 'r');
try {
while (
$line = fgets($f)) {
yield
$line;
}
} finally {
fclose($f);
}
}

$getLines = getLines('no_such_file.txt');
$getLines->rewind(); // 使用 ->rewind(),文件读取错误将在此处抛出,日志文件将不会被清除

openAndClearLogFile();

foreach (
$getLines as $n => $line) { // 不使用 ->rewind(),脚本将在此处终止,您的日志文件将被清除
writeToLogFile('reading: ' . $line . "\n");
}

closeLogFile();

?>

附注:当您在 ->rewind() 之后迭代生成器时,您将立即获得第一个 yield 的值,因为前面的代码已经执行。
uther at somewherebetweennowhere dot net
9 年前
我猜想它存在的 *唯一* 目的是为了与 Iterator 接口兼容 o_O
To Top