对象数组与一般数组的区别
一般数组,foreach会把值拷贝到循环变量中
对象数组,foreach会把值(对象)的引用拷贝循环变量中,因为是拷贝,所以将会改变原对象的值。
class a
{
public $a = 10;
public $b = 11;
public $c = 12;
}
$instanceA = new a();
$instanceB = new a();
$arr = [$instanceA, $instanceB];
foreach ($arr as $key => $object) {
$object->a = 100;
}
var_dump($arr);
执行结果:
array(2) {
[0]=>
object(a)#1 (3) {
["a"]=>
int(100)
["b"]=>
int(11)
["c"]=>
int(12)
}
[1]=>
object(a)#2 (3) {
["a"]=>
int(100)
["b"]=>
int(11)
["c"]=>
int(12)
}
}
可以看到属性a的值被修改了。
下面是一般数组的情况:
$arrA = [
10, 11, 13
];
$arrB = [
10, 11, 13
];
$arr = [$arrA, $arrB];
foreach ($arr as $key => $object) {
$object[0] = 100;
}
var_dump($arr);
执行结果:
array(2) {
[0]=>
array(3) {
[0]=>
int(10)
[1]=>
int(11)
[2]=>
int(13)
}
[1]=>
array(3) {
[0]=>
int(10)
[1]=>
int(11)
[2]=>
int(13)
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
这样写就可以了,具体可以看一下PHP对象赋值和普通变量赋值的区别,也就是深拷贝和浅拷贝的区别