yield的目的就是節省內存,有了它我們可以用來技術超大型計算和大型文件上傳存
舉個例子
echo "初始: " . memory_get_usage() . " 字節 </br>";
function createRange($number)
{
$data = [];
for ($i = 0; $i < $number; $i++) {
$data[] = time();
}
return $data;
}
function createRange2($number)
{
for ($i = 0; $i < $number; $i++) {
yield time();
}
}
$result = createRange2(10);
foreach ($result as $value) {
sleep(1);
echo $value . "</br>";
}
echo "最終: " . memory_get_usage() . " 字節 </br>";
echo "內存總量: " . memory_get_peak_usage() . " 字節 </br>";
分別執行createRange和createRange2查看內存消耗
注:一個生成器不可以返回值: 這樣做會產生一個編譯錯誤。然而return空是一個有效的語法並且它將會終止生成器繼續執行。