国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

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

2020-03-22 19:26:42
字體:
來源:轉載
供稿:網友
這篇文章給大家介紹的內容是關于PHP動態生成內容的數組(生成器)的解析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

定義:

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

過程:

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

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

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

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

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

3690546572-5b12dd89c9677_articlex.jpg

設想使用場景:

1、取大數據文件,生成器中逐行讀取;
2、???

例子:

 gen.php 1 ?php 2 function gen() 4 echo 生成器開始執行 . PHP_EOL; 5 for ($i = 0; $i $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 $html' target='_blank'>value);//YES $data = yield $value;//NO
2、可以使用yield $key = $val;
3、PHP7之后,yield from 可以調用生成器、數組、使用return等。
(傳送門:PHP手冊里都有)

相關文章推薦:

PHP7中生成器的新特性:生成器委托( yield-from ) 返回值(return-value)

PHP生成器Generators的簡單解析

以上就是PHP動態生成內容的數組(生成器)的解析的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大名县| 仁怀市| 渭源县| 新宾| 屏山县| 宜宾县| 赞皇县| 承德县| 海林市| 大竹县| 鄂伦春自治旗| 通许县| 紫阳县| 晴隆县| 岳西县| 仁布县| 商河县| 文登市| 汶川县| 广河县| 贞丰县| 通城县| 贺州市| 诸暨市| 昌图县| 东兴市| 琼中| 保山市| 株洲市| 赣州市| 平远县| 湖州市| 辰溪县| 饶平县| 老河口市| 六盘水市| 通山县| 石棉县| 宁化县| 陆川县| 宜城市|