看来在PHP对象中是通过引用传递的。甚至赋值运算符似乎也没有创建对象的副本。
这是一个简单的人为证明:
<?php
class A {
public $b;
}
function set_b($obj) { $obj->b = "after"; }
$a = new A();
$a->b = "before";
$c = $a; //i would especially expect this to create a copy.
set_b($a);
print $a->b; //i would expect this to show 'before'
print $c->b; //i would ESPECIALLY expect this to show 'before'
?>
在这两种印刷情况下,我都会得到“之后”的印象
那么,如何通过值而不是通过引用将$ a传递给set_b()?
2
在极少数情况下,您实际上会想要这种行为。因此,如果您发现自己经常使用自我,那么编写代码的方式可能存在更根本的错误?
—
troelskn
不,还不需要使用它。
—
Nick Stinemates,
(object) ((array) $objectA)
可能会比使用clone $objectA
或带来更好的性能,从而获得相同的预期结果new stdClass
。