码迷,mamicode.com
首页 > 其他好文 > 详细

foreach的指针问题

时间:2014-06-21 08:08:53      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   ext   color   

从代码:

        $arr = array(1,2,3,4,5);
        echo $arr = array(1,2,3,4,5),<br>;
        foreach($arr as $key => &$row) {
            echo key($arr), =>, current($arr), "||";
            echo $key, =>, $row, "<br>";
        }
 
        foreach($arr as $key => $row) {
            echo key($arr), =>, current($arr), "||";
//next($arr); echo $key,
=>, $row, "<br>"; } exit;

运行的结果:

$arr = array(1,2,3,4,5)
1=>2||0=>1
2=>3||1=>2
3=>4||2=>3
4=>5||3=>4
=>||4=>5


1=>2||0=>1
1=>2||1=>2
1=>2||2=>3
1=>2||3=>4
1=>2||4=>4

(如果删除第二个foreach前的注释号,结果与第一个带引用的foreach相同)

来说,可以发现三个问题

1.foreach语句执行之后,被操作的数组的指针就被往后移动了一位,并取出了数据赋值给$key,$row

2.在两种方式里面使用next,end等函数对foreach的执行不造成影响,因为即使在数组循环的过程中使用函数end将操作数组的指针指向最后一个元素也会继续执行完foreach语句,所以可以推测foreach执行过程中会有一个全局的变量来存储当前操作数组的指针,而是用了next,end等函数之后会生成一个副本。

3.foreach使用引用与非引用可能就在于副本什么时候生成,对于非引用的直接在foreach之后就会生成,对于引用的在调用next,end等函数之前才会生成,也就是在语义分析的时候就已经判断了。

foreach的指针问题,布布扣,bubuko.com

foreach的指针问题

标签:style   class   blog   code   ext   color   

原文地址:http://www.cnblogs.com/kudosharry/p/3795314.html

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