什麼是生成器generators
生成器允許你在 foreach **塊中寫**來迭代一組資料而不需要在記憶體中建立乙個陣列, 那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫乙個生成器函式,就像乙個普通的自定義函式一樣, 和普通函式只返回一次不同的是, 生成器可以根據需要 yield 多次,以便生成需要迭代的值。
乙個簡單的例子就是使用生成器來重新實現 range() 函式。 標準的 range() 函式需要在記憶體中生成乙個陣列包含每乙個在它範圍內的值,然後返回該陣列, 結果就是會產生多個很大的陣列。 比如,呼叫 range(0, 10000) 將導致記憶體占用超過 4 mb。
例子**
<?php
/** * created by phpstorm.
* user: [email protected]
* date: 2018/7/30
* time: 上午11:29
*/$start = xdebug_memory_usage();
$num = 10000;
function rangewithgenerators($start, $limit, $step = 1)
for ($i = $start; $i <= $limit; $i += $step) } else
for ($i = $start; $i >= $limit; $i += $step)
}}if ($argc === 1)
//var_dump(iterator_to_array($iterate));
}if ($argc === 2)
}$end = xdebug_memory_usage();
echo sprintf("記憶體消耗量%s\n", convert($end-$start));
function convert($size)
環境
執行命令
測試結果論述
foreach迴圈該generators,本例子中則使用該方法讀取generators。
php標準函式iterator_to_array(),該函式將generators轉換為乙個array。
使用場景,可查閱參考資料2
PHP 生成器Generator理解
寄凡 風雪之隅 php手冊 生成器 generator 引用自官網 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現iterator介面的方式,效能開銷和複雜性大大降低。生成器允許你在foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限 劃...
Generator生成器基礎
生成器函式是es6提供的一種非同步程式設計解決方案,語法行為與傳統函式完全不同 function gen let iterator gen console.log iterator 不會輸出hello 是乙個迭代器物件 需要呼叫next方法才會輸出 iterator.next 輸出結果 yield相...
php的Generator生成器及yield
官方文件 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現iterator介面的方式,效能開銷和複雜性大大降低。生成器允許你在foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫乙個生成器函式,就像...