1

编辑:如果我在一个对象上应用一些业务逻辑,然后我需要一个它的克隆在其他一些过程中横向移动。在对象的新实例上重新应用很有可能产生不同结果的业务逻辑或克隆现有实例是否更有效?但是,如果我这样做 $a = $b,通过引用传递的对象是不够的。

让我们看这个例子:

$a = new test();
$b = $a;
$b->setSomeProp('test');
$a->setSomeProp('failed');
echo $b->getSomeProp(); //returns 'failed'

$a = new test();
$b = unserialize(serialize($a));
$b->setSomeProp('test');
$a->setSomeProp('failed');
echo $b->getSomeProp(); //returns 'test'

有没有更好的方法来替换参考?

4

3 回答 3

0

是的。您需要取消设置参考

只需使用unset($b)

于 2012-10-18T17:13:29.407 回答
0

我可以看到您的代码已更改。您正在寻找的是clone. 试试这个:

$b = clone $a;
于 2012-10-19T08:50:32.517 回答
0

请参阅:PHP 全局或 $GLOBALS

来自@Artefacto:“在函数内部,如果要取消设置全局变量,则必须使用 unset($GLOBALS['varname']),而不是全局 $varname; unset($varname);。”

于 2012-12-14T18:06:56.823 回答