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空是一个有效的语法并且它将会终止生成器继续执行。