摘要:標(biāo)準(zhǔn)的函數(shù)需要在內(nèi)存中生成一個數(shù)組包含每一個在它范圍內(nèi)的值,然后返回該數(shù)組結(jié)果就是會產(chǎn)生多個很大的數(shù)組。下面來用的生成器,代替原生,實(shí)現(xiàn)的方法。關(guān)閉一個生成器的注意事項
關(guān)于生成器
當(dāng)一個生成器被調(diào)用的時候,它返回一個可以被遍歷的對象.當(dāng)你遍歷這個對象的時候(例如通過一個foreach循環(huán)),PHP 將會在每次需要值的時候調(diào)用生成器函數(shù),并在產(chǎn)生一個值之后保存生成器的狀態(tài),這樣它就可以在需要產(chǎn)生下一個值的時候恢復(fù)調(diào)用狀態(tài)。
一旦不再需要產(chǎn)生更多的值,生成器函數(shù)可以簡單退出,而調(diào)用生成器的代碼還可以繼續(xù)執(zhí)行,就像一個數(shù)組已經(jīng)被遍歷完了。
Demo標(biāo)準(zhǔn)的 range() 函數(shù)需要在內(nèi)存中生成一個數(shù)組包含每一個在它范圍內(nèi)的值,然后返回該數(shù)組, 結(jié)果就是會產(chǎn)生多個很大的數(shù)組。 比如,調(diào)用 range(0, 1000000) 將導(dǎo)致內(nèi)存占用超過 100 MB。
下面來用PHP的生成器,代替原生range,實(shí)現(xiàn)range的方法。
function xrange($start, $limit, $step = 1) { if ($start < $limit) { if ($step <= 0) { throw new LogicException("Step must be +ve"); } for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } else { if ($step >= 0) { throw new LogicException("Step must be -ve"); } for ($i = $start; $i >= $limit; $i += $step) { yield $i; } } }
Demo
echo "Single digit odd numbers from range(): "; foreach (range(1, 9, 2) as $number) { echo "$number "; } echo " "; echo "Single digit odd numbers from xrange(): "; foreach (xrange(1, 9, 2) as $number) { echo "$number "; }
關(guān)閉一個生成器的注意事項:
https://wiki.php.net/rfc/generators#closing_a_generator
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21713.html
摘要:通過注冊自動加載器,腳本引擎在出錯失敗前有了最后一個機(jī)會加載所需的類構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)允行開發(fā)者在一個類中定義一個方法作為構(gòu)造函數(shù)。析構(gòu)函數(shù)會在到某個對象的所有引用都被刪除或者當(dāng)對象被顯式銷毀時執(zhí)行抽象類支持抽象類和抽象方法。 語言參考 1. 類型 1.1 簡介 showImg(https://segmentfault.com/img/bVbqlNJ?w=531&h=379);...
摘要:本項目總結(jié)了大部分替代的方法,暫時只支持以上瀏覽器。返回指定元素及其后代的文本內(nèi)容。從服務(wù)器讀取數(shù)據(jù)并替換匹配元素的內(nèi)容。用它自己的方式處理,原生遵循標(biāo)準(zhǔn)實(shí)現(xiàn)了最小來處理。當(dāng)全部被解決時返回,當(dāng)任一被拒絕時拒絕。是創(chuàng)建的一種方式。 原文https://github.com/nefe/You-D... You Dont Need jQuery showImg(https://segmen...
摘要:附上結(jié)果圖片下圖為方法中導(dǎo)出的練習(xí)數(shù)據(jù),頭部引入除過都是封裝了的方法類,導(dǎo)出主要參考下面兩個方法。 require(./db/dbManager.php); require(./session.php); require(./department_utils.php); class ExportCSV{ function __construct(){ $thi...
摘要:附上結(jié)果圖片下圖為方法中導(dǎo)出的練習(xí)數(shù)據(jù),頭部引入除過都是封裝了的方法類,導(dǎo)出主要參考下面兩個方法。 require(./db/dbManager.php); require(./session.php); require(./department_utils.php); class ExportCSV{ function __construct(){ $thi...
閱讀 3531·2021-11-24 09:39
閱讀 790·2019-08-30 14:22
閱讀 3042·2019-08-30 13:13
閱讀 2327·2019-08-29 17:06
閱讀 2928·2019-08-29 16:22
閱讀 1264·2019-08-29 10:58
閱讀 2440·2019-08-26 13:47
閱讀 1639·2019-08-26 11:39