PHP生成器节省内存应用

一、概念:

  PHP生成器是从PHP5.5引入的功能,生成器会根据需求计算并产出要迭代的值,这对应用的性能有重大的影响,试想一下,假如标准的PHP迭代器经常在内存中执行迭代操作,这要预先计算出数据集,性能低下,如果要使用特定的方式计算大量数据,对性能的影响更甚,此时我们可以使用生成器,即时计算并产出后续值,不占用宝贵的内存资源。

二、一个简单的生成器示例:

  <?php

    function myGenerator(){

      yield ‘value1’;

      yield 'value2';

      yield 'value3';

    }

 

    foreach(myGenerator() as $yieldValue){

      echo $yieldValue."<br>";

    }

  ?>

上述代码输出如下:

  value1

  value2

  value3

 

三、使用生成器处理大数据CSV文件

  function getRow($file){

    $handle = fopen($file,'rb');

    if($handle == false){

      throw new Exception();

    }

    while(feof($handle) === false){

      yield fgetcsv($handle);

    }

    fclose($handle);

  }

 

  foreach(getRows('data.csv') as $row){

    print_r($row);

  }

 

  说明:上述示例一次只会为csv文件中的一行分配内存,而不会把整个4GB的CSV文件都读取到内存中。

posted @ 2022-01-01 20:03  技艺追求者  阅读(93)  评论(0)    收藏  举报