PHP動態產生內容的數組(產生器)的解析

來源:互聯網
上載者:User
這篇文章給大家介紹的內容是關於PHP動態產生內容的數組(產生器)的解析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

定義:

產生器:“動態產生內容的數組”,用到值的時候才去生產。
搭配使用:關鍵字 yield foreach

過程:

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

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

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

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

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

設想使用情境:

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;//NO
2、可以使用yield $key => $val;
3、PHP7之後,yield from 可以調用產生器、數組、使用return等。
(傳送門:PHP手冊裡都有)

相關文章推薦:

PHP7中產生器的新特性:產生器委託( yield-from )&傳回值(return-value)

PHP產生器Generators的簡單解析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.