如何通过引用传递 PHP 对象

How to pass a PHP object NOT by reference

在PHP中对象自动通过引用传递:

$obj1 = new stdClass();
$obj1->foo = 'bar';
$obj2 = $obj1;
$obj2->foo = 'OOF';
var_dump($obj1->foo); // OOF

有没有一种优雅的方法来复制该变量而不是引用原始变量?我想存储一个对象的副本,然后在不影响原始对象的情况下对其进行修改。谢谢

您可以clone对象:

$obj2 = clone $obj1;

请注意 $obj2 将是 $obj1 的浅拷贝。如 PHP 手册所述:

When an object is cloned, PHP 5 will perform a shallow copy of all of the object's properties. Any properties that are references to other variables will remain references.

如果您愿意,您可以覆盖 __clone() 方法以手动克隆任何子对象。