PHP如何在不更新先前值的情况下为对象分配新值


PHP how to assign new value to object without updating previous value

这是一个对象的代码:

$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
相关文章: