这是一个对象的代码:
$a = new stdClass();
$a->value = 'key';
$array[] = $a;
$array[] = $a;
$a->value = 'key2';
$array[] = $a;
print_r($array);
这是数组
的代码$a = array("value" => "key");
$array[] = $a;
$array[] = $a;
$a['value'] = 'key2';
$array[] = $a;
print_r($array);
输出对象:
Array
(
[0] => stdClass Object
(
[value] => key2
)
[1] => stdClass Object
(
[value] => key2
)
[2] => stdClass Object
(
[value] => key2
)
)
数组的输出:
Array
(
[0] => Array
(
[value] => key
)
[1] => Array
(
[value] => key
)
[2] => Array
(
[value] => key2
)
)
当$a
是一个对象时,它将已经在$array
中的值更新为key2
,但当$a
是一个数组时,它只更新最后一个值。我怎么能让对象的行为像数组,只更新最后的值?
谢谢。
PHP对象是通过引用自动传递的,所以如果你更新最后一个对象,它将更新所有内容。所以只要使用clone
来克隆你的对象,例如
$array[] = clone $a;
//^^^^^ See here