似乎在 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() ?
在 PHP 5+ 中,对象是通过引用传递的。在 PHP 4 中,它们是按值传递的(这就是它在运行时通过引用传递的原因,这已被弃用)。
您可以使用 PHP5 中的“克隆”运算符来复制对象:
$objectB = clone $objectA;
此外,它只是通过引用传递的对象,而不是您在问题中所说的所有内容......