当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-29 18:10:53 PHP

定义:生成器:“动态生成内容的数组”,只有在使用值时才会产生。使用with:关键字yieldforeach过程:作为生成器方法相当于定义一个数组;生成器中每次出现的yield都等同于定义一个出现在数组中的值;foreach会遍历生成器中所有yield的定义值(一个定义值(表达式),只有使用它的时候,才会执行当前yield和上一个yield之间的其他表达式,不会执行当前yield之后的表达式);如果foreach正常结束(不是break),判断生成器中最后一次yield之后是否还有其他未执行的表达式。在执行之间来回切换只会节省空间,而不是时间。想象一下使用场景:1.取一个大数据文件,在生成器中逐行读取;2.???例子:gen.php1$val){17echo'使用数据前'.PHP_EOL;18echo'使用数据:'.$瓦尔。PHP_EOL;19echo'使用数据后'.PHP_EOL;20//if($key>=4){21//中断;22//}23}执行结果:phpgen.php生成器开始执行了吗?生成器开始生成数据前:0使用数据前使用数据:0使用数据后生成数据后:0生成数据前:1使用数据前使用数据:1使用数据后生成数据后:1生成数据前:2使用使用数据前:2使用数据后生成数据后:2生成数据前:3使用数据前使用数据:3使用数据后生成数据后:3生成数据前:4使用数据使用前数据:4使用后生成data数据之后:4使用数据之前的另一个数据:5使用数据之后,生成器的执行结束。执行过程解读:1、第14行并没有调用生成器gen(),只是定义了它;2、进入foreach循环后,开始调用gen();3、当$val需要取值时,记住当前位置a,执行生成器;4.执行到yield定义的地方,获取值,记住当前位置b,返回位置a;5、循环3、4步;6.结束循环,执行最后一个yield定义之后剩下的部分;7.去掉第20、21、22行的注释“Usedata:4Afterusingdata”后执行,不会有其他输出Others(只验证过PHP7.1.14版本)1.$data=(yield$value);//YES$data=yield$value;//NO2.你可以使用yield$key=>$val;3.PHP7之后yieldfrom可以调用生成器,数组,使用return等(传送门:PHP手册中都有)