PHP入門:Generatorsについて -vol.3-

スポンサーリンク
PHP入門:Generatorsについて -vol.3- 用語解説
PHP入門:Generatorsについて -vol.3-
この記事は約4分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、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ジェネレータを使用する例です。ジェネレータは、特定の条件で値を生成するための強力な機能です。

  1. ジェネレータ関数の定義:
    • gen_three_nulls というジェネレータ関数が定義されています。
    • この関数は、range(1, 3) を使って、1から3までの整数を生成します。
    • yield; の部分で、null値をジェネレータに返します。
  2. ジェネレータの利用:
    • gen_three_nulls() を呼び出すと、ジェネレータオブジェクトが返されます。
    • iterator_to_array(gen_three_nulls()) でジェネレータから値を配列に変換します。
    • var_dump() で配列の中身を表示します。
  3. 出力結果:
    • 上記のコードを実行すると、以下のような出力が得られます:

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ジェネレータを使用する例です。ジェネレータは、特定の条件で値を生成するための強力な機能です。

  1. ジェネレータ関数の定義:
    • gen_reference というジェネレータ関数が定義されています。
    • この関数は、while ループを使用して、1から3までの整数を生成します。
    • yield $value; の部分で、値 $value をジェネレータに返します。
  2. ジェネレータの利用:
    • gen_reference() を呼び出すと、ジェネレータオブジェクトが返されます。
    • foreach ループを使って、ジェネレータから値を取り出します。
    • 各値は $number に参照渡しで代入され、(--$number).'... ' で表示されます。
  3. 出力結果:
    • 上記のコードを実行すると、以下のような出力が得られます:
2... 1... 0...

おわりに

今日は、PHPのGeneratorsについてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました