為什麼要使用發電機
當你需要生成大型集合以便稍後迭代時,生成器非常有用。它們是建立實現迭代器的類的一種更簡單的替代方法,這通常是過度的。
例如,考慮以下功能。
function randomNumbers(int $length)
{
$array = [];
for ($i = 0; $i < $length; $i++) {
$array[] = mt_rand(1, 10);
}
return $array;
}
所有這個函式都會生成一個充滿隨機數的陣列。要使用它,我們可能會做 randomNumbers(10)
,這將給我們一個包含 10 個隨機數的陣列。如果我們想生成一百萬個隨機數怎麼辦? randomNumbers(1000000)
將為我們做到這一點,但代價是記憶。儲存在陣列中的一百萬個整數使用大約 33 兆位元組的記憶體。
$startMemory = memory_get_usage();
$randomNumbers = randomNumbers(1000000);
echo memory_get_usage() - $startMemory, ' bytes';
這是因為一次生成並返回了一百萬個隨機數,而不是一次一個。生成器是解決此問題的簡便方法。