摘要:定義生成器動(dòng)態(tài)生成內(nèi)容的數(shù)組,用到值的時(shí)候才去生產(chǎn)。其他僅驗(yàn)證了版本可以使用之后,可以調(diào)用生成器數(shù)組使用等。傳送門手冊(cè)里都有
定義:
生成器:“動(dòng)態(tài)生成內(nèi)容的數(shù)組”,用到值的時(shí)候才去生產(chǎn)。
搭配使用:關(guān)鍵字 yield foreach
作為生成器的方法相當(dāng)于定義了一個(gè)數(shù)組;
生成器中的 yield,每次出現(xiàn)相當(dāng)于定義了一個(gè)數(shù)組中出現(xiàn)的值;
foreach 會(huì)遍歷生成器中所有的 yield 定義的值(某個(gè)被定義的值(表達(dá)式),只有在被用到的時(shí)候,當(dāng)前yield同上一個(gè)yield之間的其他表達(dá)式才會(huì)被執(zhí)行,當(dāng)前yield之后的表達(dá)式不會(huì)被執(zhí)行);
foreach 正常結(jié)束的話(不是break),判斷一下生成器中最后一個(gè)yield之后是否有其他表達(dá)式未執(zhí)行完,是的話,執(zhí)行之;
不同于線程,不是并行執(zhí)行,只是在主業(yè)務(wù)邏輯和生成器之間來回切換執(zhí)行,只節(jié)省了空間,時(shí)間沒省下來。
設(shè)想使用場(chǎng)景:1、取大數(shù)據(jù)文件,生成器中逐行讀取;
2、???
gen.php 1 $val) { 17 echo "使用數(shù)據(jù)前" . PHP_EOL; 18 echo "使用數(shù)據(jù):" . $val . PHP_EOL; 19 echo "使用數(shù)據(jù)后" . PHP_EOL; 20 //if ($key >= 4) { 21 //break; 22 //} 23 }執(zhí)行結(jié)果:
php gen.php 生成器開始執(zhí)行了嗎? 生成器開始執(zhí)行 產(chǎn)生數(shù)據(jù)之前:0 使用數(shù)據(jù)前 使用數(shù)據(jù):0 使用數(shù)據(jù)后 產(chǎn)生數(shù)據(jù)之后:0 產(chǎn)生數(shù)據(jù)之前:1 使用數(shù)據(jù)前 使用數(shù)據(jù):1 使用數(shù)據(jù)后 產(chǎn)生數(shù)據(jù)之后:1 產(chǎn)生數(shù)據(jù)之前:2 使用數(shù)據(jù)前 使用數(shù)據(jù):2 使用數(shù)據(jù)后 產(chǎn)生數(shù)據(jù)之后:2 產(chǎn)生數(shù)據(jù)之前:3 使用數(shù)據(jù)前 使用數(shù)據(jù):3 使用數(shù)據(jù)后 產(chǎn)生數(shù)據(jù)之后:3 產(chǎn)生數(shù)據(jù)之前:4 使用數(shù)據(jù)前 使用數(shù)據(jù):4 使用數(shù)據(jù)后 產(chǎn)生數(shù)據(jù)之后:4 再來一個(gè)數(shù)據(jù) 使用數(shù)據(jù)前 使用數(shù)據(jù):5 使用數(shù)據(jù)后 生成器執(zhí)行結(jié)束部分執(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ù)后",就不再有其他輸出。
1、$data = (yield $value);//YES $data = yield $value;//NO
2、可以使用yield $key => $val;
3、PHP7之后,yield from 可以調(diào)用生成器、數(shù)組、使用return等。
(傳送門:PHP手冊(cè)里都有)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/28755.html
摘要:為單進(jìn)程的由代執(zhí)行每一個(gè)請(qǐng)求由從進(jìn)程池中取出進(jìn)程初始化數(shù)據(jù)結(jié)構(gòu)創(chuàng)建進(jìn)程變量共享類似于的內(nèi)容為所有進(jìn)程所共享即單例模式默認(rèn)是采用磁盤文件實(shí)現(xiàn)的管理即變量是一次請(qǐng)求說單獨(dú)的享有的不能被所有請(qǐng)求所共享共享由于每次請(qǐng)求代由創(chuàng)建進(jìn)程所以由共享問題是使 php為單進(jìn)程的,由apache代執(zhí)行,每一個(gè)請(qǐng)求,由apache從進(jìn)程池中取出進(jìn)程,初始化數(shù)據(jù)結(jié)構(gòu),創(chuàng)建進(jìn)程. 變量共享,類似于session的...
摘要:父類方法為錯(cuò)誤,成員方法不得被重寫。父子類方法靜態(tài)屬性不一致父類方法為非靜態(tài)而子類的是靜態(tài)或相反,錯(cuò)誤。 1.類的結(jié)構(gòu) 類是編譯階段的產(chǎn)物,而對(duì)象是運(yùn)行時(shí)產(chǎn)生的,它們歸屬于不同階段。編譯完成后我們定義的每個(gè)類都會(huì)生成一個(gè)zend_class_entry,它保存著類的全部信息,在執(zhí)行階段所有類相關(guān)的操作都是用的這個(gè)結(jié)構(gòu), struct _zend_class_entry { ch...
摘要:換一臺(tái)電腦就要重新安裝。并且還需要適配不同的系統(tǒng)。提交大小幾乎沒有限制。即協(xié)議主要由請(qǐng)求和響應(yīng)組成。相反則為同步按照程序的順序,依次往下執(zhí)行,必須等上一程序執(zhí)行完成之后才能執(zhí)行下一程序,阻礙程序的執(zhí)行。 Ajax 服務(wù)器 類型 按照服務(wù)類型:文件服務(wù)器,數(shù)據(jù)庫服務(wù)器,郵件服務(wù)器,Web服務(wù)器 按照操作系統(tǒng):Linux服務(wù)器,Windows服務(wù)器 按照應(yīng)用軟件:Apache服務(wù)器,Ng...
摘要:出題思路本次題目來自于我的一個(gè)外包項(xiàng)目實(shí)踐。回合制比賽以分鐘為一回合。選手在比賽過程中需要盜取到對(duì)手的密鑰,以竊聽他方內(nèi)容,并修改己方密鑰以放泄露動(dòng)態(tài)該部分同樣由中心服務(wù)器與完成。 Author: RytiaDate: 20190427Blog: www.zzfly.net本人才學(xué)疏淺,望君不吝賜教 背景 受學(xué)校老師邀請(qǐng),為學(xué)弟學(xué)妹舉辦分享會(huì)介紹 AWD 相關(guān)經(jīng)驗(yàn),本人一時(shí)頭腦風(fēng)暴采用...
摘要:對(duì)于來說,變量有全局變量和局部變量之分那么,他們都是存儲(chǔ)到一個(gè)哈希表內(nèi)了么其實(shí)不是的,變量存儲(chǔ)也有作用域的概念。 上次跟大家講了垃圾回收機(jī)制后,有些小伙伴對(duì)底層原理比較感興趣,私信問我了一些關(guān)于變量的相關(guān)知識(shí),既然大家對(duì)變量比較感興趣,那么這次我們來系統(tǒng)的講一下變量的底層原理 變量結(jié)構(gòu) 首先,我們還是先擺上我們的zval結(jié)構(gòu)體,即php所有變量都會(huì)以zval結(jié)構(gòu)體的形式實(shí)現(xiàn) struc...
閱讀 2716·2021-11-11 16:54
閱讀 2334·2021-10-09 09:44
閱讀 2561·2019-08-30 15:54
閱讀 1944·2019-08-30 11:24
閱讀 1182·2019-08-29 17:03
閱讀 2113·2019-08-29 16:22
閱讀 2092·2019-08-29 13:11
閱讀 1055·2019-08-29 12:14