美文网首页
php yield 程序优化

php yield 程序优化

作者: 顶尖少爷 | 来源:发表于2019-03-11 16:39 被阅读0次

yield

生成器函数看上去就像一个普通函数, 除了不是返回一个值之外, 生成器会根据需求产生更多的值。

直接使用demo进行解释

function 1
function getValues(){
        $valuesArray = [];
        // 获取初始内存使用量
        for ($i = 1; $i < 4; $i++) {
            $valuesArray[] =time();
        }
        return $valuesArray;
    }
function 2
function keys($num){
        for ($i = 1; $i < $num; $i++) {
            yield time(); //保存内存每次只有一条循环值
        }
调用函数
 foreach ($this->getValues() as $value){
            sleep(1);
            echo $value ."\n";
        }
        echo "<br >";
        foreach ($this->keys(4) as $value){
            sleep(1);
            echo $value ."\n";
        }
        exit;

结果

image.png

解释方法2的执行过程

-首先调用 createRange 函数,传入参数10,但是 for 值执行了一次然后停止了,并且告诉 foreach 第一次循环可以用的值。
 foreach 开始对 $result 循环,进来首先 sleep(1) ,然后开始使用 for 给的一个值执行输出。
- foreach 准备第二次循环,开始第二次循环之前,它向 for 循环又请求了一次。
 -for 循环于是又执行了一次,将生成的时间戳告诉 foreach .
- foreach 拿到第二个值,并且输出。由于 foreach 中 sleep(1) ,所以, for 循环延迟了1秒生成当前时间
所以,整个代码执行中,始终只有一个记录值参与循环,内存中也只有一条信息。

无论开始传入的 $number 有多大,由于并不会立即生成所有结果集,所以内存始终是一条循环的值。

相关文章

网友评论

      本文标题:php yield 程序优化

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