取消通过引用传递PHP

时间:2012-10-18 17:04:34

标签: php pointers

编辑:如果我在一个对象上应用一些业务逻辑然后我需要克隆它在其他一些进程中横向移动。在对象的新实例上重新应用具有不同结果的业务逻辑或克隆现有实例是否更有效?但如果我做$ 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'

有没有更好的方法来替换引用?

3 个答案:

答案 0 :(得分:0)

是。您需要unset the reference

只需使用unset($b)

即可

答案 1 :(得分:0)

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

$b = clone $a;

答案 2 :(得分:0)

请参阅:PHP global or $GLOBALS

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