PHP 引用变量名与 foreach 中 $val 同名时发生的变化

<?php
$arr = ['a', 'b', 'c', 'd'];

//引用下标 2
$v = & $arr[2];

echo "<pre>";
// 引用变量$v  与 foreach中的赋值变量$v相同
foreach ($arr as $v)
{
    echo '当前$v=' . $v . "\n";
    print_r($arr);
    echo "\n";
}

凭直觉想一下,$v会输出什么?abcd?是不是不会这么简单?

输出结果

当前$v=a
Array
(
    [0] => a
    [1] => b
    [2] => a //注意此处,此时由于$v与$arr[2]为引用关系,当$v值发生变化后,$arr[2]同样发生变化
    [3] => d
)

当前$v=b
Array
(
    [0] => a
    [1] => b
    [2] => b //同理
    [3] => d
)

当前$v=b
Array
(
    [0] => a
    [1] => b
    [2] => b //同理
    [3] => d
)

当前$v=d
Array
(
    [0] => a
    [1] => b
    [2] => d //同理
    [3] => d
)
  • 引用时,多个变量共享一个内存地址,任意变量名值的变更,都会影响拥有同样引用关系的变量。
php
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!