摘要:與標(biāo)準(zhǔn)的迭代器不同,生成器不要求類實(shí)現(xiàn)接口,從而減輕了類的負(fù)擔(dān)。生成器不能完成所有迭代器的操作。如果需要更多功能,例如在數(shù)據(jù)集中執(zhí)行后腿,快進(jìn)或查找操作,最好自己編寫(xiě)類,實(shí)現(xiàn)接口,或者使用標(biāo)準(zhǔn)庫(kù)中某個(gè)原生的迭代器參考
PHP生成器是5.5.0引入的功能。
生成器實(shí)際上就是簡(jiǎn)單的迭代器。
與標(biāo)準(zhǔn)的PHP迭代器不同,生成器不要求類實(shí)現(xiàn)Iterator接口,從而減輕了類的負(fù)擔(dān)。
生成器會(huì)根據(jù)需求計(jì)算產(chǎn)出迭代的值。而標(biāo)準(zhǔn)的PHP迭代器經(jīng)常在內(nèi)存中執(zhí)行迭代操作,這要預(yù)先計(jì)算出數(shù)據(jù)集,性能較低。
如果使用特定的防護(hù)計(jì)算大量數(shù)據(jù),可以使用生成器,即時(shí)計(jì)算并產(chǎn)出后續(xù)值,不占用內(nèi)存。
創(chuàng)建生成器不能完成所有迭代器的操作。無(wú)法后退,快進(jìn),并且生成器是一次性的,無(wú)法對(duì)此迭代同一個(gè)生成器。
生成器從不返回值,只是產(chǎn)出值。
調(diào)用生成器函數(shù)時(shí),PHP會(huì)反悔一個(gè)屬于Generator類的對(duì)象。這個(gè)對(duì)象是可以foreach迭代的。每次迭代,PHP要求這個(gè)實(shí)例計(jì)算并提供下一個(gè)要迭代的值。
每次產(chǎn)出一個(gè)值,生成器的內(nèi)部狀態(tài)都會(huì)停頓。向生成器請(qǐng)求下一個(gè)值時(shí),內(nèi)部狀態(tài)才會(huì)恢復(fù)。這種停頓-恢復(fù)的狀態(tài)會(huì)一直持續(xù)下去。
使用上面的這個(gè)方法并沒(méi)有善用內(nèi)存,使用生成器只會(huì)為一個(gè)整數(shù)分配內(nèi)存。
再舉個(gè)例子:使用生成器處理CSV文件
這個(gè)例子中,生成器只會(huì)為CSV文件分配一行內(nèi)存,而不是讀入整個(gè)文件到內(nèi)存。
如果需要更多功能,例如在數(shù)據(jù)集中執(zhí)行后腿,快進(jìn)或查找操作,最好自己編寫(xiě)類,實(shí)現(xiàn)Iterator接口(http://php.net/manual/class.iterator.php),或者使用PHP標(biāo)準(zhǔn)庫(kù)中某個(gè)原生的迭代器(http://php.net/manual/spl.iterators.php)
參考:
Modern PHP
http://bit.ly/ircmaxwell
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/21649.html
摘要:為了一探究竟,于是開(kāi)啟了這次應(yīng)用性能調(diào)優(yōu)之旅。使用即時(shí)編譯器和都能輕輕松松的讓你的應(yīng)用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結(jié)。在經(jīng)歷了調(diào)優(yōu)過(guò)程踩的很多坑之后,我們最終完善并實(shí)施了初步的性能測(cè)試方案,通過(guò)真實(shí)的測(cè)試數(shù)據(jù)歸納出了 Laravel 開(kāi)發(fā)過(guò)程中的一些實(shí)踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫(xiě)的應(yīng)用程序響應(yīng)有點(diǎn)慢、20幾個(gè)并...
摘要:在中,提示符可能是。框架使用來(lái)執(zhí)行安裝及管理依賴。為了能訪問(wèn)網(wǎng)頁(yè),要啟動(dòng)程序服務(wù)器。在大多數(shù)類系統(tǒng)中,包括,命令行提示符是符號(hào)。這兩個(gè)操作分別對(duì)應(yīng)于的和,即創(chuàng)建和讀取。首個(gè)表單要在模板中編寫(xiě)表單,可以使用表單構(gòu)造器。 【摘要】自從ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都說(shuō)技術(shù)門(mén)檻抬高了,其實(shí)你與TS+的距離僅僅只是學(xué)習(xí)一個(gè)新框架而已,所以,我們...
摘要:所謂對(duì)稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點(diǎn)之一。非對(duì)稱加密算法由于對(duì)稱加密在通信加密領(lǐng)域的缺陷,年和提出了非對(duì)稱加密的概念。非對(duì)稱加密,其主要缺點(diǎn)之一就是慢,適合加密少量數(shù)據(jù)。 1. 加密的目的 加密不同于密碼,加密是一個(gè)動(dòng)作或者過(guò)程,其目的就是將一段明文信息(人類或機(jī)器可以直接讀懂的信息)變?yōu)橐欢慰瓷先](méi)有任何意義的字符,必須通過(guò)事先約定的解密規(guī)則才能將...
閱讀 3482·2021-11-19 09:40
閱讀 1499·2021-10-13 09:41
閱讀 2673·2021-09-29 09:35
閱讀 2718·2021-09-23 11:21
閱讀 1711·2021-09-09 11:56
閱讀 839·2019-08-30 15:53
閱讀 852·2019-08-30 15:52
閱讀 605·2019-08-30 12:47