Jest dobrze udokumentowane, że PHP5 OOP objects are passed by reference domyślnie. Jeśli jest to domyślnie, wydaje mi się, że istnieje domyślny sposób kopiowania bez odniesienia, jak?Jak zrobić kopię obiektu bez odniesienia?
function refObj($object){
foreach($object as &$o){
$o = 'this will change to ' . $o;
}
return $object;
}
$obj = new StdClass;
$obj->x = 'x';
$obj->y = 'y';
$x = $obj;
print_r($x)
// object(stdClass)#1 (3) {
// ["x"]=> string(1) "x"
// ["y"]=> string(1) "y"
// }
// $obj = refObj($obj); // no need to do this because
refObj($obj); // $obj is passed by reference
print_r($x)
// object(stdClass)#1 (3) {
// ["x"]=> string(1) "this will change to x"
// ["y"]=> string(1) "this will change to y"
// }
W tym momencie chciałbym $x
być oryginalny $obj
, ale oczywiście nie jest. Czy jest jakiś prosty sposób to zrobić, czy muszę kodować coś like this
Cieszę się, że było pomocne. lonesomeday bardzo dobrze wskazuje na magiczną metodę '__clone() ', którą warto zaimplementować także niektóre klasy, na co warto zwrócić uwagę. – Treffynnon