各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

PHP动态生成内容的数组(生成器)的解析

管理员 2023-09-05
PHP
127

PHP动态生成内容的数组(生成器)的解析

内容导读

收集整理的这篇技术教程文章主要介绍了PHP动态生成内容的数组(生成器)的解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2517字,纯文字阅读大概需要4分钟

内容图文

这篇文章给大家介绍的内容是关于PHP动态生成内容的数组(生成器)的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

定义:

生成器:“动态生成内容的数组”,用到值的时候才去生产。
搭配使用:关键字 yield foreach

过程:

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

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

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

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

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

设想使用场景:

1、取大数据文件,生成器中逐行读取;
2、???

例子:

  gen.php  1 <?php  2 function gen()  3 {  4     echo '生成器开始执行' . PHP_EOL;  5     for ($i = 0; $i < 5; $i++) {  6         echo '产生数据之前:' . $i  . PHP_EOL;  7         yield $i;   8         echo '产生数据之后:' . $i  . PHP_EOL;  9     }    10     echo '再来一个数据' . PHP_EOL; 11     yield 5; 12     echo '生成器执行结束' . PHP_EOL; 13 }    14 $gen_func = gen(); 15 echo '生成器开始执行了吗?' . PHP_EOL; 16 foreach ($gen_func as $key  => $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 使用数据后",就不再有其他输出。

其他(仅验证了PHP7.1.14版本)

1、$data = (yield $value);//YES $data = yield $value;//NO
2、可以使用yield $key => $val;
3、PHP7之后,yield from 可以调用生成器、数组、使用return等。
(传送门:PHP手册里都有)

相关文章推荐:

PHP7中生成器的新特性:生成器委托( yield-from )&返回值(return-value)

PHP生成器Generators的简单解析

以上就是PHP动态生成内容的数组(生成器)的解析的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP动态生成内容的数组(生成器)的解析全部内容,希望文章能够帮你解决PHP动态生成内容的数组(生成器)的解析所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

扫码关注

qrcode

QQ交谈

回顶部