如何通过引用传递PHP对象

eme*_*his 2 php pass-by-reference

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

$obj1 = new stdClass();
$obj1->foo = 'bar';
$obj2 = $obj1;
$obj2->foo = 'OOF';
var_dump($obj1->foo); // OOF
Run Code Online (Sandbox Code Playgroud)

是否有一种优雅的方式来复制该变量而不是引用原始变量?我想存储一个对象的副本,然后修改它而不影响原始对象.谢谢.

Vik*_*tor 9

您可以克隆该对象:

$obj2 = clone $obj1;
Run Code Online (Sandbox Code Playgroud)

请注意,这$obj2将是一个浅的副本$obj1.如PHP手册中所述:

克隆对象时,PHP 5将执行所有对象属性的浅表副本.任何引用其他变量的属性都将保留引用.

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