美文网首页
两个例子弄懂PHP引用传值

两个例子弄懂PHP引用传值

作者: 乔四儿丶 | 来源:发表于2020-09-04 15:40 被阅读0次

    例1

    $a=[1,2,3];  
    foreach($a as &$v){
       print($v);
       print_r($a);
    }  
    foreach($a as $v){
       print($v);
       print_r($a);
    } 
    
    // 执行结果
    1Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    2Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    3Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    1Array
    (
        [0] => 1
        [1] => 2
        [2] => 1
    )
    2Array
    (
        [0] => 1
        [1] => 2
        [2] => 2
    )
    2Array
    (
        [0] => 1
        [1] => 2
        [2] => 2
    )
    

    解读:

    1. 第一个循环没什么特别,只是在遍历数组的最后一个元素后,'$v'值的地址指向数组的最后一个元素
    2. 第二个循环的第一次遍历,遍历数组的第一个元素,'foreach($a as $v)' 这个操纵会把第一个元素赋值给'$v',而且此时'$v'的地址指向数组的最后一个元素,所以第一次遍历后数组是{1,2,1}
    3. 第二个循环的第二次遍历,同上
    4. 第二个循环的第三次遍历,此时循环遍历的值刚好是'$v'地址指向的值

    例2

    $d = ['a', 'b', 'c'];
    foreach($d as $k => $val)
    {
      $val = &$d[$k];
      print($val);
      print_r($d);
    }
    
    // 执行结果
    aArray
    (
        [0] => a
        [1] => b
        [2] => c
    )
    bArray
    (
        [0] => b
        [1] => b
        [2] => c
    )
    cArray
    (
        [0] => b
        [1] => c
        [2] => c
    )
    

    解读:

    1. 循环的第一次遍历,将'$val'的值指向数组的第一个值的地址
    2. 循环的第二次遍历,'foreach($d as $k => $val)'这个操作把'$val'赋值成'b',所以数组的第一个元素也变成'b'
    3. 循环的第三次遍历,同上

    相关文章

      网友评论

          本文标题:两个例子弄懂PHP引用传值

          本文链接:https://www.haomeiwen.com/subject/pjwzsktx.html