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

时间:2015-08-03 16:20:39

标签: php arrays object

这是对象的代码:

$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是数组时,它只更新最后一个值。如何让对象像数组一样运行,只更新最后一个值?

谢谢。

1 个答案:

答案 0 :(得分:2)

PHP对象自动passed by reference,因此如果您更新最后一个,它将更新所有内容。所以只需使用clone来克隆你的对象,例如

$array[] = clone $a;
         //^^^^^ See here