ループ構造 (foreach など) を使用して大量のデータを反復処理するには、大量のメモリが必要になります。そしてかなりの処理時間。 Generators を使用すると、このオーバーヘッドを発生させずに一連のデータを反復処理できます。ジェネレーター関数は通常の関数と似ています。ただし、関数内の return ステートメントの代わりに、yield キーワードを使用してジェネレーターが繰り返し実行され、反復される値が提供されます。
yield キーワードは、ジェネレーター メカニズムの中核です。使い方は return と似ていますが、関数の実行は停止しません。反復の次の値を提供し、関数の実行を一時停止します。
Generator implements Iterator { /* Methods */ public current ( void ) : mixed public getReturn ( void ) : mixed public key ( void ) : mixed public next ( void ) : void public rewind ( void ) : void public send ( mixed $value ) : mixed public throw ( Throwable $exception ) : mixed public valid ( void ) : bool public __wakeup ( void ) : void }
public Generator::current (void) − mix — 生成された値を取得します
public Generator::getReturn ( void ) : mix — ジェネレーターの戻り値を取得します
public Generator::key ( void ) − mix — ジェネレーターのキーを取得します生成された価値。
p>public Generator::next ( void ) − void — ジェネレーターの実行を再開します。その効果は、引数として NULL を指定して Generator::send() を呼び出した場合と同じです。
public Generator::rewind ( void ) − void — イテレータを巻き戻します。反復がすでに開始されている場合、例外がスローされます。
public Generator::send (mixed $value) : mix - 現在の yield 式の結果として指定された値をジェネレーターに送信し、ジェネレーターを復元します。
public Generator::throw ( Throwable $Exception ) − mix — ジェネレーターに例外をスローし、ジェネレーターの実行を再開します。
public Generator::valid ( void ) − bool — イテレータが閉じられているかどうかを確認します
public Generator::__wakeup ( void ) − void — ジェネレーターをシリアル化できないため、例外がスローされます。
Generator クラスは Iterator インターフェイスを実装します。ジェネレーター オブジェクトは、new を介してインスタンス化できません。 yield キーワードを含むユーザー定義関数は、ジェネレーター クラスのオブジェクトを作成します。
ジェネレーターは Iterator インターフェイスを実装しているため、各ループを使用して生成された値を反復処理できます。
ライブ デモンストレーション
<?php function squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; } } $gen=squaregenerator(); foreach ($gen as $val){ echo $val . " "; } ?>
上記のプログラムは次の出力を表示します
1 4 9 16 25
次の例では、次の current() メソッドと next() メソッドを使用します。生成された値をトラバースするジェネレーター クラス。ループ条件を確認するには、 valid() メソッドを使用します。
リアルタイム デモンストレーション
<?php function squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; } } $gen=squaregenerator(); while ( $gen->valid() ){ echo "key: " . $gen->key(). " value: ". $gen->current() . ""; $gen->next(); } ?>
上記のプログラムは次の出力を表示します
key: 0 value: 1 key: 1 value: 4 key: 2 value: 9 key: 3 value: 16 key: 4 value: 25
以上がPHPジェネレータークラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。