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

王林
リリース: 2023-09-16 17:42:02
転載
991 人が閲覧しました

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート