美文网首页
PHP 生成器

PHP 生成器

作者: dongshixiao | 来源:发表于2018-03-24 09:11 被阅读0次

    在学习python时,发现有个yield(生成器)的概念,就特别留意了下。看书时发现PHP在5.5中已经增加了生成器的概念,用法和python中一样。写个demo给小伙伴们看看。

    第一个例子是不使用生成器的例子:
    创建一个100000个元素的数组

    function makeRange($length)
    {
        $data = [];
        for ($i=0; $i <$length ; $i++) { 
            $data[] = $i;
        }
        return $data;
    }
    
    $bigIntRang = makeRange(100000);
    
    foreach ($bigIntRang as $i) {
        echo $i.PHP_EOL;
    }
    

    上述方法会在内存中创建一个100000个int型的空间,内存占用会非常高,不建议使用。
    使用生成器的demo:

    function makeRange_1($length)
    {
        for ($i=0; $i <$length ; $i++) { 
            yield $i;
        }
    }
    foreach (makeRange_1(100000) as $i) {
        echo $i.PHP_EOL;
    }
    

    生成器 节省内存

    使用生成器 每次调用时才会创建一个int型空间,非常节省内存。建议数据量大的时候使用。
    再比如调用一个很大的数据块,如一个非常大的data.csv文件:

    function getRows($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);
        echo '<hr>';
    }
    

    相关文章

      网友评论

          本文标题:PHP 生成器

          本文链接:https://www.haomeiwen.com/subject/aoqaqftx.html