每次被加载到内存中的文字只有一行,大大的减小了内存的使用。这样,即使读取上G的文本也不用担心,完全可以像读取很小文件一样编写代码。
百万级别的访问量
yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iter
function createRange($number)
{ $data = [];
for($i=0;$i<$number;$i++)
{
$data[] = time();
}
return $data;
}
$result = createRange(10); // 这里调用上面我们创建的函数 foreach($result as $value){ sleep(1);//这里停顿1秒,我们后续有用 echo $value.‘<br />‘; }
输出的结果是10个一样的时间戳,sleep(1)效果看不出来
function createRange($number){ for($i=0;$i<$number;$i++){ yield time(); } } $result = createRange(10); // 这里调用上面我们创建的函数 foreach($result as $value){ sleep(1); echo $value.‘<br />‘; }
输出的结果中间间隔了1秒
我们来还原一下代码执行过程。
10
,但是 for 值执行了一次然后停止了,并且告诉 foreach 第一次循环可以用的值。所以,整个代码执行中,始终只有一个记录值参与循环,内存中也只有一条信息。
无论开始传入的 $number 有多大,由于并不会立即生成所有结果集,所以内存始终是一条循环的值。
原文:https://www.cnblogs.com/hanmengya/p/10947835.html