PHPジェネレータークラス

WBOY
リリース: 2023-08-29 11:14:02
転載
589 人が閲覧しました

PHPジェネレータークラス

はじめに

ループ構造 (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 サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート