为什么要使用发电机
当你需要生成大型集合以便稍后迭代时,生成器非常有用。它们是创建实现迭代器的类的一种更简单的替代方法,这通常是过度的。
例如,考虑以下功能。
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';
这是因为一次生成并返回了一百万个随机数,而不是一次一个。生成器是解决此问题的简便方法。