PHP生成器-动态生成内容的数组
发布: 来源: PHP粉丝网 添加日期:2022-06-03 08:38:29 浏览: 评论:0
定义:
1.生成器:“动态生成内容的数组”,用到值的时候才去生产。
2.搭配使用:关键字 yield foreach
过程:
1.作为生成器的方法相当于定义了一个数组;
2.生成器中的 yield,每次出现相当于定义了一个数组中出现的值;
3.foreach 会遍历生成器中所有的 yield 定义的值(某个被定义的值(表达式),只有在被用到的时候,当前yield同上一个yield之间的其他表达式才会被执行,当前yield之后的表达式不会被执行);
4.foreach 正常结束的话(不是break),判断一下生成器中最后一个yield之后是否有其他表达式未执行完,是的话,执行之;
5.不同于线程,不是并行执行,只是在主业务逻辑和生成器之间来回切换执行,只节省了空间,时间没省下来。
设想使用场景:
1、取大数据文件,生成器中逐行读取;
2、???
例子:
gen.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等。
Tags: PHP生成器 PHP动态生成内容
- 上一篇:PHP 枚举类型的管理与设计
- 下一篇:最后一页
相关文章
- ·php验证码生成器(2018-08-06)
- ·PHP基础之生成器3——生成器对象(2021-01-02)
- ·PHP基础之生成器2——生成器语法详情解析(2021-01-02)
- ·PHP基础之生成器1——生成器简介和示例(2021-01-02)
- ·PHP生成器功能与用法实例分析(2021-09-05)
- ·PHP迭代器和生成器用法实例分析(2021-12-23)
- ·PHP 生成器的使用详解(2022-04-25)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)