首頁  >  文章  >  後端開發  >  PHP生成器-動態生成內容的數組

PHP生成器-動態生成內容的數組

藏色散人
藏色散人轉載
2020-02-17 17:16:173271瀏覽

定義:

1.產生器:“動態產生內容的陣列”,用到值的時候才去生產。

2.搭配使用:關鍵字yield foreach

推薦:《php培訓

過程:

1.作為生成器的方法相當於定義了一個數組;

2.生成器中的yield,每次出現相當於定義了一個數組中出現的值;

3.foreach 會遍歷生成器中​​所有的yield 定義的值(某個被定義的值(表達式),只有在被用到的時候,當前yield同上一個yield之間的其他表達式才會被執行,當前yield之後的表達式不會被執行);

4.foreach 正常結束的話(不是break),判斷一下生成器中最後一個yield之後是否有其他表達式未執行完,是的話,執行之;

5.不同於線程,不是並行執行,只是在主業務邏輯和生成器之間來回切換執行,只節省了空間,時間沒省下來。

PHP生成器-動態生成內容的數組

設想使用場景:

#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 需要值的時候,記住當前位置a,執行生成器;

#4、執行到yield 定義的地方,取到值了,記住當前位置b ,回到位置a;

5、循環3、4兩步;

6、循環結束,執行完yield 最後一次定義的地方的剩下部分;

#7、去掉20、21、22行的註解後執行,"使用資料:4 使用資料後",就不再有其他輸出。

其他(僅驗證了PHP7.1.14版本)

1、value);//YES 值;//NO

2、可以使用yield val;

3、PHP7之後,yield from 可以呼叫生成器、陣列、使用return等。

更多程式相關內容,請關注php中文網程式設計教學欄位!

以上是PHP生成器-動態生成內容的數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除