码迷,mamicode.com
首页 > Web开发 > 详细

php 生成器 入门理解

时间:2016-10-25 14:19:13      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:理解   返回   cti   内容   function   而不是   生成   输出   相关   

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

 问题:得到一个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



php 生成器 入门理解

标签:理解   返回   cti   内容   function   而不是   生成   输出   相关   

原文地址:http://www.cnblogs.com/babylonTower/p/5996285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!