PHP 生成器與迭代器物件


引言

在內部呼叫生成器函式時,將返回生成器類的某個新物件。其實現了**迭代器**介面。該迭代器介面定義以下抽象方法

  • 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

更新時間:2020-09-18

475 次瀏覽

開啟您的 職業

完成課程獲得認證

開始
廣告
© . All rights reserved.