• 技术文章 >后端开发 >php教程

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

    藏色散人藏色散人2020-03-05 17:32:55转载1718
    定义:

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

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

    推荐:《php培训

    过程:

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

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

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

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

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

    c7be8cb393ea15f2cb0b0d202cb6670.png

    php入门到就业线上直播课:进入学习

    设想使用场景:

    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中文网编程教程栏目!

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

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:PHP生成器
    上一篇:php实现将文件上传到临时目录 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 六个强大的PHP/MYSQL代码生成器介绍• ps生成器出现问题什么意思• PHP性能优化利器:生成器• PHP生成器yield处理大量数据业务(代码示例)
    1/1

    PHP中文网