成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP生成器--動(dòng)態(tài)生成內(nèi)容的數(shù)組

klinson / 521人閱讀

摘要:定義生成器動(dòng)態(tài)生成內(nèi)容的數(shù)組,用到值的時(shí)候才去生產(chǎn)。其他僅驗(yàn)證了版本可以使用之后,可以調(diào)用生成器數(shù)組使用等。傳送門(mén)手冊(cè)里都有

定義:

生成器:“動(dòng)態(tài)生成內(nèi)容的數(shù)組”,用到值的時(shí)候才去生產(chǎn)。
搭配使用:關(guān)鍵字 yield foreach

過(guò)程:

作為生成器的方法相當(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é)束的話(huà)(不是break),判斷一下生成器中最后一個(gè)yield之后是否有其他表達(dá)式未執(zhí)行完,是的話(huà),執(zhí)行之;

不同于線(xiàn)程,不是并行執(zhí)行,只是在主業(yè)務(wù)邏輯和生成器之間來(lái)回切換執(zhí)行,只節(jié)省了空間,時(shí)間沒(méi)省下來(lái)。

設(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
生成器開(kāi)始執(zhí)行了嗎?
生成器開(kāi)始執(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
再來(lái)一個(gè)數(shù)據(jù)
使用數(shù)據(jù)前
使用數(shù)據(jù):5
使用數(shù)據(jù)后
生成器執(zhí)行結(jié)束
部分執(zhí)行過(guò)程解讀:

1、14行并沒(méi)有調(diào)用生成器gen(),只是做了定義;
2、進(jìn)入 foreach 循環(huán)后,開(kāi)始調(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、$data = (yield $value);//YES $data = yield $value;//NO
2、可以使用yield $key => $val;
3、PHP7之后,yield from 可以調(diào)用生成器、數(shù)組、使用return等。
(傳送門(mén):PHP手冊(cè)里都有)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28755.html

相關(guān)文章

  • PHP內(nèi)存模型

    摘要:為單進(jìn)程的由代執(zhí)行每一個(gè)請(qǐng)求由從進(jìn)程池中取出進(jìn)程初始化數(shù)據(jù)結(jié)構(gòu)創(chuàng)建進(jìn)程變量共享類(lèi)似于的內(nèi)容為所有進(jìn)程所共享即單例模式默認(rèn)是采用磁盤(pán)文件實(shí)現(xiàn)的管理即變量是一次請(qǐng)求說(shuō)單獨(dú)的享有的不能被所有請(qǐng)求所共享共享由于每次請(qǐng)求代由創(chuàng)建進(jìn)程所以由共享問(wèn)題是使 php為單進(jìn)程的,由apache代執(zhí)行,每一個(gè)請(qǐng)求,由apache從進(jìn)程池中取出進(jìn)程,初始化數(shù)據(jù)結(jié)構(gòu),創(chuàng)建進(jìn)程. 變量共享,類(lèi)似于session的...

    Maxiye 評(píng)論0 收藏0
  • (PHP7內(nèi)核剖析-8) 類(lèi)

    摘要:父類(lèi)方法為錯(cuò)誤,成員方法不得被重寫(xiě)。父子類(lèi)方法靜態(tài)屬性不一致父類(lèi)方法為非靜態(tài)而子類(lèi)的是靜態(tài)或相反,錯(cuò)誤。 1.類(lèi)的結(jié)構(gòu) 類(lèi)是編譯階段的產(chǎn)物,而對(duì)象是運(yùn)行時(shí)產(chǎn)生的,它們歸屬于不同階段。編譯完成后我們定義的每個(gè)類(lèi)都會(huì)生成一個(gè)zend_class_entry,它保存著類(lèi)的全部信息,在執(zhí)行階段所有類(lèi)相關(guān)的操作都是用的這個(gè)結(jié)構(gòu), struct _zend_class_entry { ch...

    JohnLui 評(píng)論0 收藏0
  • ajax概述

    摘要:換一臺(tái)電腦就要重新安裝。并且還需要適配不同的系統(tǒng)。提交大小幾乎沒(méi)有限制。即協(xié)議主要由請(qǐng)求和響應(yīng)組成。相反則為同步按照程序的順序,依次往下執(zhí)行,必須等上一程序執(zhí)行完成之后才能執(zhí)行下一程序,阻礙程序的執(zhí)行。 Ajax 服務(wù)器 類(lèi)型 按照服務(wù)類(lèi)型:文件服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器,郵件服務(wù)器,Web服務(wù)器 按照操作系統(tǒng):Linux服務(wù)器,Windows服務(wù)器 按照應(yīng)用軟件:Apache服務(wù)器,Ng...

    Achilles 評(píng)論0 收藏0
  • 基于 Swoole 構(gòu)建 CTF AWD 比賽環(huán)境搭建與實(shí)踐

    摘要:出題思路本次題目來(lái)自于我的一個(gè)外包項(xiàng)目實(shí)踐?;睾现票荣愐苑昼姙橐换睾?。選手在比賽過(guò)程中需要盜取到對(duì)手的密鑰,以竊聽(tīng)他方內(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)暴采用...

    GitCafe 評(píng)論0 收藏0
  • php底層原理之變量(一)

    摘要:對(duì)于來(lái)說(shuō),變量有全局變量和局部變量之分那么,他們都是存儲(chǔ)到一個(gè)哈希表內(nèi)了么其實(shí)不是的,變量存儲(chǔ)也有作用域的概念。 上次跟大家講了垃圾回收機(jī)制后,有些小伙伴對(duì)底層原理比較感興趣,私信問(wèn)我了一些關(guān)于變量的相關(guān)知識(shí),既然大家對(duì)變量比較感興趣,那么這次我們來(lái)系統(tǒng)的講一下變量的底層原理 變量結(jié)構(gòu) 首先,我們還是先擺上我們的zval結(jié)構(gòu)體,即php所有變量都會(huì)以zval結(jié)構(gòu)體的形式實(shí)現(xiàn) struc...

    curlyCheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<