ホームページ > バックエンド開発 > PHPチュートリアル > PHP でコンテンツを動的に生成する配列 (ジェネレーター) の解析

PHP でコンテンツを動的に生成する配列 (ジェネレーター) の解析

不言
リリース: 2023-04-03 15:18:02
オリジナル
2548 人が閲覧しました

この記事では、PHP で動的に生成されるコンテンツの配列 (ジェネレーター) の解析について紹介します。一定の参考価値があります。必要な友人は参考にしてください。お役に立てれば幸いです。

定義:

ジェネレーター: 「動的に生成されたコンテンツの配列」。値が使用された場合にのみ生成されます。
使用条件: キーワード yield foreach

プロセス:

  1. ジェネレーター メソッドとしては、配列を定義するのと同等です。

  2. ジェネレーターで yield が出現するたびに、配列に表示される値を定義するのと同じです。

  3. foreach は、配列内のすべての値を走査します。ジェネレーター yield で定義された値 (定義された値 (式)) は、それが使用された場合にのみ実行されます。 現在の yield と前の yield の間の他の式が実行されます。 現在の yield 以降の式は実行されません。 );

  4. foreach が正常に終了した場合 (ブレークではない)、ジェネレーターの最後の yield 以降に実行されていない他の式があるかどうかを確認し、存在する場合はそれらを実行します。

  5. ##スレッドとは異なり、並列実行されません。メインのビジネス ロジックとジェネレーターの間で実行を行ったり来たりするだけです。スペースを節約するだけで、時間は節約しません。

PHP でコンテンツを動的に生成する配列 (ジェネレーター) の解析

使用シナリオを想像してください:

1. ビッグデータを取得します。ファイル、ジェネレーターで 1 行ずつ読み取ります;

2,? ? ?


例:

  gen.php
  1 <?php   2 function gen()
  3 {
  4     echo &#39;生成器开始执行&#39; . PHP_EOL;
  5     for ($i = 0; $i < 5; $i++) {
  6         echo &#39;产生数据之前:&#39; . $i  . PHP_EOL;
  7         yield $i; 
  8         echo &#39;产生数据之后:&#39; . $i  . PHP_EOL;
  9     }   
 10     echo &#39;再来一个数据&#39; . PHP_EOL;
 11     yield 5;
 12     echo &#39;生成器执行结束&#39; . PHP_EOL;
 13 }   
 14 $gen_func = gen();
 15 echo &#39;生成器开始执行了吗?&#39; . 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 マニュアルで入手可能)


おすすめ関連記事:

PHP7 のジェネレーターの新機能: ジェネレーター委任 (yield-from) と戻り値 (return) -value)

PHP ジェネレーターの簡単な分析 Generators

以上がPHP でコンテンツを動的に生成する配列 (ジェネレーター) の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート