
よっしー
こんにちは。よっしーです(^^)
今日は、PHPのGeneratorsについてご紹介します。
背景
PHP8.2を利用したAPIを開発しているときにGeneratorsを利用したので、そのときの調査内容を備忘としてのこしました。
こちらのサイトを参考にしています。
null値を生成する
 yieldは引数なしで呼び出すことができ、自動的なキーとともにnull値を生成します。
サンプル
<?php
function gen_three_nulls() {
    foreach (range(1, 3) as $i) {
        yield;
    }
}
var_dump(iterator_to_array(gen_three_nulls()));
このコードは、PHPでジェネレータを使用する例です。ジェネレータは、特定の条件で値を生成するための強力な機能です。
- ジェネレータ関数の定義:
- gen_three_nullsというジェネレータ関数が定義されています。
- この関数は、range(1, 3)を使って、1から3までの整数を生成します。
- yield;の部分で、null値をジェネレータに返します。
 
- ジェネレータの利用:
- gen_three_nulls()を呼び出すと、ジェネレータオブジェクトが返されます。
- iterator_to_array(gen_three_nulls())でジェネレータから値を配列に変換します。
- var_dump()で配列の中身を表示します。
 
- 出力結果:
- 上記のコードを実行すると、以下のような出力が得られます:
 
array(3) {
  [0]=>
  NULL
  [1]=>
  NULL
  [2]=>
  NULL
}参照渡しによる値の生成
ジェネレータ関数は、値を参照渡しまたは値渡しで生成することができます。これは、関数から参照を返す場合と同様に行います。つまり、関数名の前にアンパサンドを付けることで行います。
サンプル
<?php
function &gen_reference() {
    $value = 3;
    while ($value > 0) {
        yield $value;
    }
}
/*
 * Note that we can change $number within the loop, and
 * because the generator is yielding references, $value
 * within gen_reference() changes.
 */
foreach (gen_reference() as &$number) {
    echo (--$number).'... ';
}
このコードは、PHPでジェネレータを使用する例です。ジェネレータは、特定の条件で値を生成するための強力な機能です。
- ジェネレータ関数の定義:
- gen_referenceというジェネレータ関数が定義されています。
- この関数は、whileループを使用して、1から3までの整数を生成します。
- yield $value;の部分で、値- $valueをジェネレータに返します。
 
- ジェネレータの利用:
- gen_reference()を呼び出すと、ジェネレータオブジェクトが返されます。
- foreachループを使って、ジェネレータから値を取り出します。
- 各値は $numberに参照渡しで代入され、(--$number).'... 'で表示されます。
 
- 出力結果:
- 上記のコードを実行すると、以下のような出力が得られます:
 
2... 1... 0...おわりに
今日は、PHPのGeneratorsについてご紹介しました。

よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
 
  
  
  
  



コメント