2024 年 PHP 日本研討會

Generator::rewind

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

Generator::rewind將迭代器倒回至起始位置

說明

public Generator::rewind(): void

如果迭代已經開始,這個函式會拋出例外。

參數

此函式沒有參數。

回傳值

不回傳任何值。

新增筆記

使用者貢獻的筆記 1 則筆記

i'm pati on stackoverflow
8 年前
實際上,這個方法可以用於在迭代之前測試生成器,因為它會執行您的函式直到第一個 yield 陳述式。例如,如果您嘗試在生成器中讀取不存在的檔案,通常只會在用戶端程式碼 foreach() 的第一次迭代中發生錯誤。有時事先檢查這一點至關重要。

看看這裡修改後的範例
https://php.dev.org.tw/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 的值,因為前面的程式碼已經執行。
To Top