克隆包含对象的对象

时间:2012-12-05 23:54:01

标签: php

因为默认情况下PHP通过引用传递对象所以我遇到了一个跟随脚本演示的小问题:

$a = new stdClass();
$a->b = new stdClass();
$a->b->c = 1;

$d = clone $a;

$a->b->c = 10;

print_r($a);
print_r($d);

有没有办法克隆stdClass并克隆它可能包含的任何对象?我知道我可以使用__clone方法来防止这种行为,但我的对象是通过json_decode构建的。

2 个答案:

答案 0 :(得分:3)

我认为可接受的方法是序列化和反序列化复合对象

$d = unserialize(serialize($a));

答案 1 :(得分:0)

由于您已经拥有JSON,为什么不直接从JSON

创建所有对象

“深度克隆”的另一种黑客方式(即不向对象添加__clone()方法)也是这样做的:

$object_b = unserialize(serialize($object_a));

或者,因为您要处理所有嵌套的stdClass对象:

$object_b = json_decode(json_encode($object_a));