この記事では、PHP で動的に生成されるコンテンツの配列 (ジェネレーター) の解析について紹介します。一定の参考価値があります。必要な友人は参考にしてください。お役に立てれば幸いです。
定義:
ジェネレーター: 「動的に生成されたコンテンツの配列」。値が使用された場合にのみ生成されます。
使用条件: キーワード yield foreach
プロセス:
ジェネレーター メソッドとしては、配列を定義するのと同等です。
ジェネレーターで yield が出現するたびに、配列に表示される値を定義するのと同じです。
foreach は、配列内のすべての値を走査します。ジェネレーター yield で定義された値 (定義された値 (式)) は、それが使用された場合にのみ実行されます。 現在の yield と前の yield の間の他の式が実行されます。 現在の yield 以降の式は実行されません。 );
foreach が正常に終了した場合 (ブレークではない)、ジェネレーターの最後の yield 以降に実行されていない他の式があるかどうかを確認し、存在する場合はそれらを実行します。
使用シナリオを想像してください:
1. ビッグデータを取得します。ファイル、ジェネレーターで 1 行ずつ読み取ります;
2,? ? ? gen.php
1 <?php 2 function gen()
3 {
4 echo '生成器开始执行' . PHP_EOL;
5 for ($i = 0; $i < 5; $i++) {
6 echo '产生数据之前:' . $i . PHP_EOL;
7 yield $i;
8 echo '产生数据之后:' . $i . PHP_EOL;
9 }
10 echo '再来一个数据' . PHP_EOL;
11 yield 5;
12 echo '生成器执行结束' . PHP_EOL;
13 }
14 $gen_func = gen();
15 echo '生成器开始执行了吗?' . PHP_EOL;
16 foreach ($gen_func as $key => $val) {
17 echo '使用数据前' . PHP_EOL;
18 echo '使用数据:' . $val . PHP_EOL;
19 echo '使用数据后' . PHP_EOL;
20 //if ($key >= 4) {
21 //break;
22 //}
23 }
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 に値が必要な場合は、現在の位置 a を覚えてジェネレーターを実行します;
4. yield が定義されている場所まで実行し、値を取得します。現在位置 b を記憶し、位置 a に戻ります。#5. ステップ 3 と 4 をループします。##6. ループは、yield で定義された最後の場所を実行した後に終了します。 . 残りの部分;
7. 20行目、21行目、22行目のコメントを削除し、「データの使用: 4 データの使用後」を実行すると、それ以外の出力はありません。
その他 (PHP7.1.14 バージョンのみ検証済み)
1. $data = (yield $value);//YES $data = yield $value;/ / NO2. yield $key => $val;3. PHP7 以降では、yield from でジェネレーター、配列を呼び出したり、return を使用したりできます。
(ポータル: PHP マニュアルで入手可能)
おすすめ関連記事:
以上がPHP でコンテンツを動的に生成する配列 (ジェネレーター) の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。