摘要:定义生成器动态生成内容的数组,用到值的时候才去生产。其他仅验证了版本可以使用之后,可以调用生成器数组使用等。传送门手册里都有
定义:
生成器:“动态生成内容的数组”,用到值的时候才去生产。
搭配使用:关键字 yield foreach
作为生成器的方法相当于定义了一个数组;
生成器中的 yield,每次出现相当于定义了一个数组中出现的值;
foreach 会遍历生成器中所有的 yield 定义的值(某个被定义的值(表达式),只有在被用到的时候,当前yield同上一个yield之间的其他表达式才会被执行,当前yield之后的表达式不会被执行);
foreach 正常结束的话(不是break),判断一下生成器中最后一个yield之后是否有其他表达式未执行完,是的话,执行之;
不同于线程,不是并行执行,只是在主业务逻辑和生成器之间来回切换执行,只节省了空间,时间没省下来。
设想使用场景:1、取大数据文件,生成器中逐行读取;
2、???
gen.php 1 $val) { 17 echo "使用数据前" . PHP_EOL; 18 echo "使用数据:" . $val . PHP_EOL; 19 echo "使用数据后" . PHP_EOL; 20 //if ($key >= 4) { 21 //break; 22 //} 23 }执行结果:
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 使用数据后",就不再有其他输出。
1、$data = (yield $value);//YES $data = yield $value;//NO
2、可以使用yield $key => $val;
3、PHP7之后,yield from 可以调用生成器、数组、使用return等。
(传送门:PHP手册里都有)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28755.html
摘要:父类方法为错误,成员方法不得被重写。父子类方法静态属性不一致父类方法为非静态而子类的是静态或相反,错误。 1.类的结构 类是编译阶段的产物,而对象是运行时产生的,它们归属于不同阶段。编译完成后我们定义的每个类都会生成一个zend_class_entry,它保存着类的全部信息,在执行阶段所有类相关的操作都是用的这个结构, struct _zend_class_entry { ch...
摘要:出题思路本次题目来自于我的一个外包项目实践。回合制比赛以分钟为一回合。选手在比赛过程中需要盗取到对手的密钥,以窃听他方内容,并修改己方密钥以放泄露动态该部分同样由中心服务器与完成。 Author: RytiaDate: 20190427Blog: www.zzfly.net本人才学疏浅,望君不吝赐教 背景 受学校老师邀请,为学弟学妹举办分享会介绍 AWD 相关经验,本人一时头脑风暴采用...
摘要:对于来说,变量有全局变量和局部变量之分那么,他们都是存储到一个哈希表内了么其实不是的,变量存储也有作用域的概念。 上次跟大家讲了垃圾回收机制后,有些小伙伴对底层原理比较感兴趣,私信问我了一些关于变量的相关知识,既然大家对变量比较感兴趣,那么这次我们来系统的讲一下变量的底层原理 变量结构 首先,我们还是先摆上我们的zval结构体,即php所有变量都会以zval结构体的形式实现 struc...
阅读 2660·2021-11-11 16:54
阅读 2313·2021-10-09 09:44
阅读 2532·2019-08-30 15:54
阅读 1925·2019-08-30 11:24
阅读 1159·2019-08-29 17:03
阅读 2091·2019-08-29 16:22
阅读 2064·2019-08-29 13:11
阅读 1014·2019-08-29 12:14