【发布时间】:2020-01-12 04:39:59
【问题描述】:
考虑一下这个在数组中循环的 PHP 代码 sn-p 按值引用:
$arr = [1 ,2 , 3];
var_dump($arr);
echo '<br>';
foreach ($arr as &$val) { // note ampersand sign
// Anything
}
var_dump($arr);
现在首先 var_dump() 发出
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
但是第二次发射
array(3) { [0]=> int(1) [1]=> int(2) [2]=> &int(3) }
因此,通过引用在数组中循环已经改变了最后一个值类型 - 从整数到整数 reference ! 怎么可能呢?为什么 PHP 决定自己更改元素类型而开发人员无意这样做?
【问题讨论】:
-
在
foreach之后执行unset($val)。 -
$a = &$b;使两个变量都成为参考。这就是你的 foreach 所做的 - $val=$arr[0] 然后 $val =& $arr[1].... -
我知道取消设置 $val 或更改变量名会有所帮助。但问题不在于这个。 WTF,为什么中间变量会影响数组元素存储?我要求解释这种奇怪的行为或背后的理由
标签: php arrays pass-by-reference