php 生成器 入门理解

来源:互联网 发布:七雄战记更新网络错误 编辑:程序博客网 时间:2024/05/21 17:48

概念太晦涩,看不懂,直接上例子:

问题:得到一个1-1000000的整数数组,然后用foreach遍历输出

如果没有生成器,这样做:

$arr=range(1,1000000);//这个函数最终会返回一个数组;
foreach ($arr as $key => $value) {//此时遍历的是整个放在内存中的数组    echo $key.'=>'.$value.'<br />'; //输出}//总结:由迭代器我们可以知道,foreach的时候,每次遍历都会操作内存中的数组的键值,改变指针指向等等,//遍历一次,操作一次数组,这样很耗费内存如果有生成器,这样做:
function xrange( $start ,  $limit ,  $step  =  1 ) {//简单写一个range()        for ( $i  =  $start ;  $i  <=  $limit ;  $i  +=  $step ) {            yield $i ; //yield会将当前值返回,而不是保存到数组中        }}foreach(xrange(1,1000000)as $key=>$value){//这里遍历时,遍历的是一个xrange的返回值(不是数组)    echo $key.'=>'."$value".'<br />' ;//输出}//总结:foreach每次遍历,都会调用一次xrange函数,而每调用一次xrange函数,都能得到一个yield的返回值,//然后yield会将下一个值放到自己里面,等到foreach下次遍历yield会返回这个值,然后再将下一个值放到自己里面...//这就是yield,它使得foreach的时候可以不用每次遍历都操作内存中的数组,遍历的时候直接就有被遍历的值了,//不用再去操作数组然后再得到要被遍历的值至于其他相关高深内容,去查看手册和大神们的帖子吧!ps:yield想要生效,前提是php的版本>=5.5.0
0 0