2012-12-05 183 views
3

因爲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構建的。

回答

3

我相信接受的方式是序列化和反序列化複合物

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

同意。當我需要一個對象的深層副本時,我就是這麼做的。更多信息@ http://melikedev.com/2011/01/13/php-deep-clone-an-object/ –

0

既然你已經有了JSON,爲什麼你不直接從JSON

另一個創建所有對象到「深克隆」(由不添加__clone()方法的對象IE)哈克的方式也將做:

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

或者,因爲你是在處理所有的智慧h stdClass對象是嵌套的:

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