ホームページ  >  記事  >  バックエンド開発  >  PHP ジェネレーターとイテレーター オブジェクトの比較

PHP ジェネレーターとイテレーター オブジェクトの比較

王林
王林転載
2023-09-16 17:41:02990ブラウズ

PHP ジェネレーターとイテレーター オブジェクトの比較

はじめに

ジェネレーター関数が呼び出されると、新しい Generator クラス オブジェクトが内部的に返されます。 Iterator インターフェイスを実装します。イテレータ インターフェイスは、次の抽象メソッドを定義します。

  • Iterator::current - 現在の要素を返します。
  • Iterator::key - 戻り値現在の要素 要素のキー
  • Iterator::next — 次の要素に進みます
  • Iterator: :rewind — イテレータを巻き戻します最初の要素へ
  • #Iterator::valid — 現在の位置が有効かどうかを確認します

ジェネレーターは 前方専用反復子#として機能します## オブジェクトであり、ジェネレーターへの値の送信やジェネレーターからの値の戻りなど、ジェネレーターの状態を操作するための呼び出し可能なメソッドを提供します。

インタラクターとしてのジェネレーター

次の例では、ジェネレーター関数はジェネレーター オブジェクトのファイル内に行を生成します。これらの行は、oreach ループを使用して反復できます。

current() や next() などの反復子メソッドも呼び出すことができます。ただし、ジェネレーターは前方専用イテレータであるため、rewind() メソッドを呼び出すと例外がスローされます。

Example

<?php
function filegenerator($name) {
   $fileHandle = fopen($name, &#39;r&#39;);
   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();
?>

Output

Traversal Afterファイル行に次の致命的なエラーが表示されます

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

以上がPHP ジェネレーターとイテレーター オブジェクトの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。