來源:藏色散人 發(fā)布時(shí)間:2020-05-15 09:55:17 閱讀量:1701
定義:
1.生成器:“動(dòng)態(tài)生成內(nèi)容的數(shù)組”,用到值的時(shí)候才去生產(chǎn)。
2.搭配使用:關(guān)鍵字 yield foreach
推薦:《php培訓(xùn)》
過程:
1.作為生成器的方法相當(dāng)于定義了一個(gè)數(shù)組;
2.生成器中的 yield,每次出現(xiàn)相當(dāng)于定義了一個(gè)數(shù)組中出現(xiàn)的值;
3.foreach 會(huì)遍歷生成器中所有的 yield 定義的值(某個(gè)被定義的值(表達(dá)式),只有在被用到的時(shí)候,當(dāng)前yield同上一個(gè)yield之間的其他表達(dá)式才會(huì)被執(zhí)行,當(dāng)前yield之后的表達(dá)式不會(huì)被執(zhí)行);
4.foreach 正常結(jié)束的話(不是break),判斷一下生成器中最后一個(gè)yield之后是否有其他表達(dá)式未執(zhí)行完,是的話,執(zhí)行之;
5.不同于線程,不是并行執(zhí)行,只是在主業(yè)務(wù)邏輯和生成器之間來回切換執(zhí)行,只節(jié)省了空間,時(shí)間沒省下來。
設(shè)想使用場(chǎng)景:
1、取大數(shù)據(jù)文件,生成器中逐行讀?。?/p>
2、???
例子:
gen.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
執(zhí)行結(jié)果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
部分執(zhí)行過程解讀:
1、14行并沒有調(diào)用生成器gen(),只是做了定義;
2、進(jìn)入 foreach 循環(huán)后,開始調(diào)用gen();
3、$val 需要值的時(shí)候,記住當(dāng)前位置a,執(zhí)行生成器;
4、執(zhí)行到 yield 定義的地方,取到值了,記住當(dāng)前位置b,返回位置a;
5、循環(huán)3、4兩步;
6、循環(huán)結(jié)束,執(zhí)行完 yield 最后一次定義的地方的之后的剩下部分;
7、去掉20、21、22行的注釋后執(zhí)行,"使用數(shù)據(jù):4 使用數(shù)據(jù)后",就不再有其他輸出。
其他(僅驗(yàn)證了PHP7.1.14版本)
1、value);//YES value;//NO
2、可以使用yield val;
3、PHP7之后,yield from 可以調(diào)用生成器、數(shù)組、使用return等。
在線
客服
服務(wù)時(shí)間:周一至周日 08:30-18:00
選擇下列產(chǎn)品馬上在線溝通:
客服
熱線
7*24小時(shí)客服服務(wù)熱線
關(guān)注
微信
關(guān)注官方微信