定義:
1. ジェネレーター: 「動的に生成されたコンテンツの配列」。値が使用された場合にのみ生成されます。
2. 併用: キーワード yield foreach
推奨: "php training"
プロセス:
1. ジェネレーター メソッドとして、これは配列を定義することと同等です;
2. ジェネレーターでの yield の各出現は、配列に表示される値を定義することと同等です;
3.foreach は、ジェネレーター内のすべての yield で定義された値 (定義された値 (式)) を走査します。これが使用された場合にのみ、現在の yield と前の yield の間の他の式が実行されます。現在の yield の後の式yield は実行されません);
4. foreach が正常に終了した場合 (ブレークではなく)、ジェネレーター内の最後の yield の後に実行されていない他の式があるかどうかを確認します。
5. スレッドとは異なり、並列実行されず、メインのビジネス ロジックとジェネレーターの間で実行を行ったり来たりするだけであり、スペースを節約するだけで時間は節約しません。
使用シナリオを想像してください:
1. ビッグ データ ファイルを取得し、ジェネレーターで 1 行ずつ読み取ります。
2、? ? ?
例:
gen.php
<?php function gen() { echo '生成器开始执行' . PHP_EOL; for ($i = 0; $i < 5; $i++) { echo '产生数据之前:' . $i . PHP_EOL; yield $i; echo '产生数据之后:' . $i . PHP_EOL; } echo '再来一个数据' . PHP_EOL; yield 5; echo '生成器执行结束' . PHP_EOL; } $gen_func = gen(); echo '生成器开始执行了吗?' . PHP_EOL; foreach ($gen_func as $key => $val) { echo '使用数据前' . PHP_EOL; echo '使用数据:' . $val . PHP_EOL; echo '使用数据后' . PHP_EOL; //if ($key >= 4) { //break; //} }
実行結果:
php gen.php 生成器开始执行了吗? 生成器开始执行 产生数据之前:0 使用数据前 使用数据:0 使用数据后 产生数据之后:0 产生数据之前:1 使用数据前 使用数据:1 使用数据后 产生数据之后:1 产生数据之前:2 使用数据前 使用数据:2 使用数据后 产生数据之后:2 产生数据之前:3 使用数据前 使用数据:3 使用数据后 产生数据之后:3 产生数据之前:4 使用数据前 使用数据:4 使用数据后 产生数据之后:4 再来一个数据 使用数据前 使用数据:5 使用数据后 生成器执行结束
の部分実行プロセスの解釈:
1. 行 14 はジェネレーター gen() を呼び出しませんが、定義するだけです;
2. foreach ループに入った後、gen の呼び出しを開始します();
3. $val に値が必要な場合、現在の位置を覚えてジェネレーターを実行します;
4. yield で定義された場所まで実行し、値を取得します。現在の位置 b. 、位置 a に戻る;
5. ループ ステップ 3 および 4;
6. ループの終了、最後に定義された yield の場所の後の残りの部分を実行します;
7. 20行目、21行目、22行目のコメントを削除し、「データの使用: 4 データの使用後」を実行すると、それ以外の出力はありません。
その他 (PHP7.1.14 バージョンのみ検証済み)
1, value);//YES value;//NO
2, OK After yield val;
3 と PHP7 を使用すると、yield from でジェネレーター、配列を呼び出したり、return を使用したりできます。
その他のプログラミング関連コンテンツについては、php 中国語 Web サイトの プログラミング チュートリアル 列に注目してください。
以上がPHP ジェネレーター - コンテンツの配列を動的に生成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。