您好,登錄后才能下訂單哦!
這篇文章主要為大家詳細(xì)介紹了PHP生成器-動態(tài)生成內(nèi)容的數(shù)組方法演示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
定義:
1.生成器:“動態(tài)生成內(nèi)容的數(shù)組”,用到值的時候才去生產(chǎn)。
2.搭配使用:關(guān)鍵字 yield foreach
過程:
1.作為生成器的方法相當(dāng)于定義了一個數(shù)組;
2.生成器中的 yield,每次出現(xiàn)相當(dāng)于定義了一個數(shù)組中出現(xiàn)的值;
3.foreach 會遍歷生成器中所有的 yield 定義的值(某個被定義的值(表達(dá)式),只有在被用到的時候,當(dāng)前yield同上一個yield之間的其他表達(dá)式才會被執(zhí)行,當(dāng)前yield之后的表達(dá)式不會被執(zhí)行);
4.foreach 正常結(jié)束的話(不是break),判斷一下生成器中最后一個yield之后是否有其他表達(dá)式未執(zhí)行完,是的話,執(zhí)行之;
5.不同于線程,不是并行執(zhí)行,只是在主業(yè)務(wù)邏輯和生成器之間來回切換執(zhí)行,只節(jié)省了空間,時間沒省下來。
設(shè)想使用場景:
1、取大數(shù)據(jù)文件,生成器中逐行讀取;
2、???
例子:
gen.php
<?php function gen() { echo '生成器開始執(zhí)行' . PHP_EOL; for ($i = 0; $i < 5; $i++) { echo '產(chǎn)生數(shù)據(jù)之前:' . $i . PHP_EOL; yield $i; echo '產(chǎn)生數(shù)據(jù)之后:' . $i . PHP_EOL; } echo '再來一個數(shù)據(jù)' . PHP_EOL; yield 5; echo '生成器執(zhí)行結(jié)束' . PHP_EOL; } $gen_func = gen(); echo '生成器開始執(zhí)行了嗎?' . PHP_EOL; foreach ($gen_func as $key => $val) { echo '使用數(shù)據(jù)前' . PHP_EOL; echo '使用數(shù)據(jù):' . $val . PHP_EOL; echo '使用數(shù)據(jù)后' . PHP_EOL; //if ($key >= 4) { //break; //} }
執(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 再來一個數(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 需要值的時候,記住當(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等。
以上就是PHP生成器-動態(tài)生成內(nèi)容的數(shù)組方法演示的簡略介紹,當(dāng)然詳細(xì)使用上面的不同還得要大家自己使用過才領(lǐng)會。如果想了解更多,歡迎關(guān)注億速云行業(yè)資訊頻道哦!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。