zoukankan      html  css  js  c++  java
  • foreach的指针问题

    从代码:

            $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等函数之前才会生成,也就是在语义分析的时候就已经判断了。

  • 相关阅读:
    事件对象
    type of 操作符和instanceof操作符的区别以及使用方法
    JS:XML
    JS:事件处理程序
    JS:event对象下的target属性和取消冒泡事件
    JS:callee属性
    JS:call()和apply的区别
    JS:事件对象1
    DOM元素的大小和位置
    CSS:在IE浏览器下,元素下沉一行的解决办法
  • 原文地址:https://www.cnblogs.com/kudosharry/p/3795314.html
Copyright © 2011-2022 走看看