PHP 引用变量名与 foreach 中 变量名 同名时发生的变化
<?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 )
引用时,多个变量共享一个内存地址,任意变量名值的变更,都会影响拥有同样引用关系的变量。