函数中的unset属性也会影响传递的变量

时间:2015-08-12 14:11:21

标签: php object

我有以下代码

<?php
$foo[0] = new stdclass();
$foo[0]->foo = 'bar';
$foo[0]->foo2 = 'bar';
destroy_foo($foo);
var_dump ($foo);

function destroy_foo($foo) 
{
    unset($foo[0]->foo);
}
?>

输出

array(1) { [0]=> object(stdClass)#1 (1) { ["foo2"]=> string(3) "bar" } } 

我希望$foo[0]->foo仍然存在于函数之外,但它并不存在。如果我删除属性而只是使用数组,它可以工作。如果我在函数内部更改变量名,同样的问题。我如何使用属性但使其按预期工作?

2 个答案:

答案 0 :(得分:1)

您认为错误是一种PHP行为,即按预期工作&#34;:请参阅objects and references官方指南。

您不清楚要使用代码实现什么,但是您应该尝试将对象的clone传递给函数。

答案 1 :(得分:0)

在PHP中,当所有引用未被设置时,对象将仅释放其资源并触发其__destruct方法。所以,为了达到你想要的结果,你必须这样做 指定null而不是取消它。

$ foo [0] - &gt; foo = null;