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