概念太晦澀,看不懂,直接上例子:
問題:得到乙個1-1000000的整數陣列,然後用foreach遍歷輸出
如果沒有生成器,這樣做:
$arr=range(1,1000000);//這個函式最終會返回乙個陣列;
foreach ($arr as $key => $value)//總結:由迭代器我們可以知道,foreach的時候,每次遍歷都會操作記憶體中的陣列的鍵值,改變指標指向等等,//遍歷一次,操作一次陣列,這樣很耗費記憶體
如果有生成器,這樣做:
function xrange( $start , $limit , $step = 1 )}foreach(xrange(1,1000000)as $key=>$value)
//總結:foreach每次遍歷,都會呼叫一次xrange函式,而每呼叫一次xrange函式,都能得到乙個yield的返回值,
//然後yield會將下乙個值放到自己裡面,等到foreach下次遍歷yield會返回這個值,然後再將下乙個值放到自己裡面...
//這就是yield,它使得foreach的時候可以不用每次遍歷都操作記憶體中的陣列,遍歷的時候直接就有被遍歷的值了,
//不用再去運算元組然後再得到要被遍歷的值
至於其他相關高深內容,去檢視手冊和大神們的帖子吧!
ps:yield想要生效,前提是php的版本》=5.5.0
PHP 生成器Generator理解
寄凡 風雪之隅 php手冊 生成器 generator 引用自官網 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現iterator介面的方式,效能開銷和複雜性大大降低。生成器允許你在foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限 劃...
生成器 PHP的生成器yield 原創
在php 5.5中,php多了乙個新的特性,那就是生成器 generator 生成器提供了一種更簡單的方法來實現簡單的物件迭代。下面的manual的引用 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現 iterator 介面的方式,效能開銷和複雜性大大降低。生成器允許你在 for...
理解 Python 生成器
什麼時候呼叫,什麼時候計算並返回值 生成器僅僅儲存了一套生成數值的演算法,並且沒有讓這個演算法現在就開始執行,而是我什麼時候調它,它什麼時候開始計算乙個新的值,並給你返回。在python中,一邊迴圈一邊計算的機制,稱為生成器 generator。列表耗記憶體 列表所有資料都在記憶體中,如果有海量資料...