PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPジェネレータークラス


はじめに

foreachなどのループ構造を使用して大量のデータコレクションをトラバースする 大容量のメモリとかなりの処理時間が必要になります。 ジェネレーターを使用 これらのオーバーヘッドなしでデータのセットを反復することが可能です。ジェネレーター関数は通常の関数に似ています。ただし、ジェネレータは関数内のreturnステートメントの代わりに、利回りを使用します 繰り返される値を提供するために繰り返し実行されるキーワード。

イールドキーワードは、ジェネレータメカニズムの中心です。その使用法は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)-混合 —生成された値を取得します

public Generator ::getReturn(void):混合 —ジェネレータの戻り値を取得します

public Generator ::key(void)-混合 —生成された値のキーを取得します。

public Generator ::next(void)− void —ジェネレータの実行を再開します。 NULLを引数としてGenerator::send()を呼び出すのと同じ効果。

public Generator ::rewind(void)− void —イテレータを巻き戻します。反復がすでに開始されている場合、これは例外をスローします。

public Generator ::send(mixed $ value):mixed —現在のyield式の結果として、指定された値をジェネレーターに送信し、ジェネレーターを再開します。

public Generator ::throw(Throwable $ exception)-混合 —ジェネレーターに例外をスローし、ジェネレーターの実行を再開します。

public Generator ::valid(void)− bool —イテレータが閉じているかどうかを確認します

public Generator ::__ wakeup(void)− void —ジェネレーターをシリアル化できないため、例外をスローします。

GeneratorクラスはIteratorインターフェースを実装します。ジェネレータオブジェクトは、newを介してインスタンス化することはできません。 yieldキーワードを持つユーザー定義関数は、ジェネレータークラスのオブジェクトを作成します。

ジェネレーターの例

ジェネレーターはIteratorインターフェースを実装しているため、foreachループを使用して生成された値をトラバースできます。

<?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() . "\n";
   $gen->next();
}
?>

出力

上記のプログラムは次の出力を示しています

key: 0 value: 1
key: 1 value: 4
key: 2 value: 9
key: 3 value: 16
key: 4 value: 25

  1. PHPのget_class_methods()関数

    get_class_methods()関数は、クラスメソッドの名前を取得します。 name_of_classで指定されたクラスに定義されたメソッド名の配列を返します。エラーの場合、NULLを返します。 構文 get_class_methods(class) パラメータ name_of_class −クラス名。必須です! 戻る get_class_methods()関数は、name_of_classで指定されたクラスに対して定義されたメソッド名の配列を返します。エラーの場合、NULLを返します。 例 以下は例です- <?php class Demo {   &n

  2. PHPのclass_exists()関数

    PHPのclass_exists()関数は、クラスが定義されているかどうかをチェックします。クラスが定義済みクラスの場合はTRUEを返し、そうでない場合はFALSEを返します。 構文 class_exists(class, autoload) パラメータ クラス −クラスの名前。 自動読み込み −デフォルトで__autoloadを呼び出すかどうか 戻る class_exists()関数は、クラスが定義されたクラスの場合はTRUEを返し、そうでない場合はFALSEを返します。 例 以下は例です- <?php if (class_exists('Demo'