发布时间:2021/11/11 作者:天马行空 阅读(2340)
yield和return有点像,它是一个生成器, 只有在你调用他的时候才会执行,并不产生多余的值。比如读取一个很大的文件,如果直接读取很有可能内存就爆了,而yield就可以做到把数据一行行读取到php运行内存,并非一次性读取到php运行内存。
传统方式:
function readLocalFile($fileName)
{
$handle = fopen($fileName, 'r');
$lins = [];
while (!feof($handle)) {
$lines[] = fgets($handle);
}
fclose($handle);
return $lines;
}
$lines = readLocalFile('./test.txt');
foreach ($lines as $row) {
.......
}
使用yield 特性读取文件:
function readYieldFile($fileName)
{
$handle = fopen($fileName, 'r');
while (!feof($handle)) {
yield fgets($handle);
}
fclose($handle);
}
$lines = readYieldFile('./test.txt');
foreach ($lines as $row) {
.......
}