PHP使用yield处理大文件读取及数据库大数据量读取

发布时间: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) {
.......
}


关键字php yield