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生成器-动态生成内容的数组的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: PHP生成器-动态生成内容的数组
本文地址: https://pptw.com/jishu/596201.html