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

PHP生成器-动态生成内容的数组,第1张

概述PHP生成-动态生成内容的数组 定义:

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

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

推荐:《php培训》

过程:

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

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

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

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

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

设想使用场景:

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生成器-动态生成内容的数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/997830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存