本文转载于SegmentFault社区
作者:小白要生发
开篇刚开始接触PHP的yield的时候,感觉,yield是什么黑科技,百度一下:yield——协程,生成器。很多文章都在讲Iterator,Generater,蛤~,这东西是PHP迭代器的一个补充。再翻几页,就是Go协程。我出于好奇点开看了下Go协程,里面都是并发,线程,管道通讯这类字眼,wc,nb,这tm才是黑科技啊,再回来看PHP,分分钟想转Go。
四部曲yield语法探究yieldfrom语法探究yield实战“多线程”编码PHPyield高级用法网络——终章yield语法加入PHPyield语法是在版本5.5加入PHP的,配合迭代器使用,功能上就是流程控制代码,和goto,turn类似。
以下就是官方提供的yield小例子,通过执行结果,我们可分析当代码执行到yield$i时,他会进行turn$i,待echo"$value\n"后,gotofor($i=1;$i=;$i++){,对!PHP的yield就是一个能出能进的语法。在z代码中七进七出,把$i平平安安得送了出来。
?phpfunctiongen_one_to_the(){for($i=1;$i=7;$i++){//注意变量$i的值在不同的yield之间是保持传递的。yield$i;}}$generator=gen_one_to_the();foach($generatoras$value){echo"$value\n";}//output1...67
我们遇到了什么问题写代码就是解决问题。我们来看看他们遇到了什么问题:php官方呢,需要言简意赅地把yield介绍给大家。一部分网友呢,需要在有限的资源内完成大文件操作。而我们的鸟哥。面对的一群对当下yield的教程停留于初级而不满意的phper,就以一个任务调度器作为例子,给大家讲了一种yield高级用法。
php.net:生成器语法: