よっしー
こんにちは。よっしーです(^^)
今日は、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についてご紹介しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント