如何在PHP中创建对象的副本?

尼克·斯蒂纳姆斯

看来在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;

而且,只是对象通过引用传递,而不是您在问题中所说的所有内容...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章