ホームページ  >  記事  >  バックエンド開発  >  PHP ジェネレーター - コンテンツの配列を動的に生成します

PHP ジェネレーター - コンテンツの配列を動的に生成します

藏色散人
藏色散人転載
2020-02-17 17:16:173276ブラウズ

定義:

1. ジェネレーター: 「動的に生成されたコンテンツの配列」。値が使用された場合にのみ生成されます。

2. 併用: キーワード yield foreach

推奨: "php training"

プロセス:

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

2. ジェネレーターでの yield の各出現は、配列に表示される値を定義することと同等です;

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

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

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

PHP ジェネレーター - コンテンツの配列を動的に生成します

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

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

2、? ? ?

例:

gen.php

 <?php
   function gen()
   {
       echo &#39;生成器开始执行&#39; . PHP_EOL;
      for ($i = 0; $i < 5; $i++) {
           echo &#39;产生数据之前:&#39; . $i  . PHP_EOL;
           yield $i; 
           echo &#39;产生数据之后:&#39; . $i  . PHP_EOL;
       }   
      echo &#39;再来一个数据&#39; . PHP_EOL;
      yield 5;
      echo &#39;生成器执行结束&#39; . PHP_EOL;
  }   
  $gen_func = gen();
  echo &#39;生成器开始执行了吗?&#39; . PHP_EOL;
  foreach ($gen_func as $key  => $val) {
      echo &#39;使用数据前&#39; . PHP_EOL;
      echo &#39;使用数据:&#39; . $val . PHP_EOL;
      echo &#39;使用数据后&#39; . 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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。