在PHP中销毁ArrayObject

时间:2011-11-26 15:38:09

标签: php arrayobject

我在ArrayObject中寻找__destroy()方法但没有找到任何实现。 如果我将包含ArrayObject的变量设置为NULL,它是否会正确销毁存储在其中的所有对象并释放内存?或者我应该在取消设置之前迭代ArrayObject来销毁每个对象吗?

2 个答案:

答案 0 :(得分:2)

在PHP中,您永远不必担心超出自己范围的内存使用量。在你的情况下,unset($obj)会正常工作。或者你可以简单地离开你所在的功能:

function f() {
    $obj = new ArrayObject();

    // do something
}

数据将被清理干净。

PHP的内部内存管理相当简单:为每个数据保留一个引用计数,如果为0,那么它就会被释放。如果只有ArrayObject包含该对象,则它的refcount为1.一旦ArrayObject消失,refcount为0,对象就会消失。

答案 1 :(得分:2)

取消设置或取消ArrayObject时,只会销毁ArrayObject实例。如果ArrayObject包含其他对象,只要没有从其他地方引用它们,它们就会被销毁,例如。

$foo = new StdClass;
$ao = new ArrayObject;
$ao[] = $foo;
$ao[] = new StdClass;
$ao = null;     // will destroy the ArrayObject and the second stdClass
var_dump($foo); // but not the stdClass assigned to $foo

另见http://www.php.net/manual/en/features.gc.refcounting-basics.php