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