【发布时间】:2017-10-07 02:33:48
【问题描述】:
代码:
$a = array('email'=>'orange@test','topic'=>'welcome onboard','timestamp'=>'2017-10-6');
$b = array();
foreach($a as $v){
$b[] = &$v;
}
var_dump($a);
var_dump($b);
结果:
array(3) {
["email"]=>
string(11) "orange@test"
["topic"]=>
string(15) "welcome onboard"
["timestamp"]=>
string(9) "2017-10-6"
}
array(3) {
[0]=>
&string(9) "2017-10-6"
[1]=>
&string(9) "2017-10-6"
[2]=>
&string(9) "2017-10-6"
}
为什么$b 的内容不是$a 的每个元素的引用? 我对 $b 的期望应该是 {&a[0],&a[1],&a[2]} 而不是 {&a[2],&a[2],&a[2]}
【问题讨论】:
-
看起来根本原因是每次 foreach 中的 $v 实际上都是相同的变量空间,而不是一个全新的变量。对于通常“按值传递”的情况,它可以正常工作,但对于“通过引用”,它会导致意外情况,除非编码人员对此有更好的理解。