PHP 生成器妙用 ( 日常使用 )

经过几章的学习,想必大家对 PHP 中的迭代器和生成器都比较熟悉了。本章节我们就来讲解下 PHP 生成器的一些妙用。

按需读取文件内容

我们在读取文件时,要么使用 file_get_content() 函数一次性将所有文件内容都读到内存中,但这样往往会耗费太多资源,所以,一般的选择应该是使用 fgets 按行读取。

以前的在循环中调用 fgets() 有一个非常不好之处,就是不能随意控制要读取的行数。导致我们必须在循环一开始就需要确定要读取的行数。

有了生成器,我们就可以使用 fgets() 按需读取文件,并在发生异常时正确关闭文件句柄。就像下面的代码所示

<?php

function getLines($file)
{
    $f = fopen($file, 'r');
    try {
        while ($line = fgets($f)) {
            yield $line;
        }
    } finally {
        fclose($f);
    }
}

foreach (getLines("file.txt") as $n => $line)
{
    if ($n > 5) break;
    echo $line;
}

使用生成器保护循环语句,并在循环触发异常时进行一些清理工作

我们可以使用生成器保护循环语句,并在循环触发异常时进行一些清理工作,就像下面的代码所示

<?php

function generator()
{
    $complete = false;
    try {

        while (($result = some_function())) {
            yield $result;
        }
        $complete = true;

    } finally {
        if (!$complete) {
            // cleanup when loop breaks 
        } else {
            // cleanup when loop completes
        }
    }

    // Do something only after loop completes
}
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.