教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 PHP生成器-动态生成内容的数组

PHP生成器-动态生成内容的数组

发布时间:2020-10-03   编辑:jiaochengji.com
教程集为您提供PHP生成器-动态生成内容的数组等资源,欢迎您收藏本站,我们将为您提供最新的PHP生成器-动态生成内容的数组资源
定义:

1.生成器:“动态生成内容的数组”,用到值的时候才去生产。

2.搭配使用:关键字 yield foreach

推荐:《php培训》

过程:

1.作为生成器的方法相当于定义了一个数组;

2.生成器中的 yield,每次出现相当于定义了一个数组中出现的值;

3.foreach 会遍历生成器中所有的 yield 定义的值(某个被定义的值(表达式),只有在被用到的时候,当前yield同上一个yield之间的其他表达式才会被执行,当前yield之后的表达式不会被执行);

4.foreach 正常结束的话(不是break),判断一下生成器中最后一个yield之后是否有其他表达式未执行完,是的话,执行之;

5.不同于线程,不是并行执行,只是在主业务逻辑和生成器之间来回切换执行,只节省了空间,时间没省下来。

c7be8cb393ea15f2cb0b0d202cb6670.png

设想使用场景:

1、取大数据文件,生成器中逐行读取;

2、???

例子:

gen.php

 <?php    function gen()    {        echo '生成器开始执行' . PHP_EOL;       for ($i = 0; $i < 5; $i  ) {            echo '产生数据之前:' . $i  . PHP_EOL;            yield $i;             echo '产生数据之后:' . $i  . PHP_EOL;        }          echo '再来一个数据' . PHP_EOL;       yield 5;       echo '生成器执行结束' . PHP_EOL;   }      $gen_func = gen();   echo '生成器开始执行了吗?' . PHP_EOL;   foreach ($gen_func as $key  => $val) {       echo '使用数据前' . PHP_EOL;       echo '使用数据:' . $val . PHP_EOL;       echo '使用数据后' . PHP_EOL;       //if ($key >= 4) {           //break;       //}    }

执行结果:

php gen.php 生成器开始执行了吗? 生成器开始执行 产生数据之前:0 使用数据前 使用数据:0 使用数据后 产生数据之后:0 产生数据之前:1 使用数据前 使用数据:1 使用数据后 产生数据之后:1 产生数据之前:2 使用数据前 使用数据:2 使用数据后 产生数据之后:2 产生数据之前:3 使用数据前 使用数据:3 使用数据后 产生数据之后:3 产生数据之前:4 使用数据前 使用数据:4 使用数据后 产生数据之后:4 再来一个数据 使用数据前 使用数据:5 使用数据后 生成器执行结束

部分执行过程解读:

1、14行并没有调用生成器gen(),只是做了定义;

2、进入 foreach 循环后,开始调用gen();

3、$val 需要值的时候,记住当前位置a,执行生成器;

4、执行到 yield 定义的地方,取到值了,记住当前位置b,返回位置a;

5、循环3、4两步;

6、循环结束,执行完 yield 最后一次定义的地方的之后的剩下部分;

7、去掉20、21、22行的注释后执行,"使用数据:4 使用数据后",就不再有其他输出。

其他(仅验证了PHP7.1.14版本)

1、value);//YES value;//NO

2、可以使用yield val;

3、PHP7之后,yield from 可以调用生成器、数组、使用return等。

更多编程相关内容,请关注教程集编程教程栏目!

以上就是PHP生成器-动态生成内容的数组的详细内容,更多请关注教程集其它相关文章!

  • 本文转载于:segmentfault,如有侵犯,请联系jquerycn@qq.com删除
  • 您可能感兴趣的文章:
    PHP生成器-动态生成内容的数组
    PHP生成静态文件简单示例
    谈谈生成静态页面的一些经验
    PHP实现页面静态化、纯静态化及伪静态化
    php动态网页是什么意思?
    使用phpqrcode生成二维码
    php代码生成器好用吗
    python迭代器与生成器用途是什么
    php页面静态化的小例子
    php程序员面试题及答案(基础理论型)

    [关闭]
    ~ ~