发布时间:2021/11/11 作者:天马行空 阅读(1636)
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) { ....... }