直接上代码吧。希望可以得到大神的分析结果。
$test = array(1, 2, 3, 4, 5);
foreach ($test as &$value) {
$value = 0;
}
unset($value);
print_r($test);
// 结果如下
Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
)
$test = array(1, 2, 3, 4, 5);
foreach ((array)$test as &$value) {
$value = 0;
}
unset($value);
print_r($test);
// 结果如下
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
如上代码所示,仅仅是使用了一下数组强制类型转换,结果却是截然不同,我想知道为什么?
先看这个例子
再看这个例子
上面连个例子都是先赋值,然后再执行foreach,但是第一个是传值,而第二个是传引用(地址),传值相对于对原array 做了一个copy 赋值到新的变量上,他们在内存中指向不是同一个地方。
在看你的第二个例子中的 (array)$test, 这个其实相当于创建一个新的array,这个array 和test 肯定不是指向同一个内存地址,所以你foreach中的赋值操作并不会修改原来test变量中的值