因为默认情况下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构建的。
答案 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));