我正在查找ArrayObject中的__destroy()方法,但未找到任何实现。 如果我将包含一个ArrayObject的变量设置为NULL,它是否会正确销毁存储在其中的所有对象并释放内存?或者我应该迭代ArrayObject来销毁每个对象,然后再设置它?在PHP中销毁ArrayObject
4
A
回答
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
2
在PHP中,你不必担心内存使用超出你自己的范围。 unset($obj)
将工作正常,在你的情况。或者,你可以简单地离开你所在的功能:
function f() {
$obj = new ArrayObject();
// do something
}
而且数据将被清理得很好。
PHP的内部内存管理相当简单:为每个数据片段保留一个引用计数,如果这是0,则会被释放。如果只有ArrayObject持有该对象,则它的refcount为1.一旦ArrayObject消失,refcount为0,对象将消失。
相关问题
- 1. PHP会话销毁
- 2. PHP Array和ArrayObject
- 3. 关闭销毁PHP会话
- 4. 真正销毁PHP会话?
- 5. swfupload销毁会话? php
- 6. 在java中销毁进程
- 7. 在codeigniter中销毁会话
- 8. 在X ++中销毁对象
- 9. 在Unity中销毁克隆
- 10. 在指令中销毁$ interval
- 11. 在GTK中销毁Windows#
- 12. angular2销毁视图销毁订阅
- 13. 销毁中间体
- 14. 销毁窗口
- 15. Zend2销毁SessionCookie
- 16. 销毁ZFS池
- 17. 销毁控件
- 18. 销毁gameObject oncomplete
- 19. 销毁jquery Modal
- 20. 销毁jScrollPane
- 21. (PHP)如何正确销毁会话cookie?
- 22. php新手问题:销毁类对象?
- 23. Php会话变量销毁此说明
- 24. PHP会话创建并销毁提交?
- 25. 正在销毁jQuery Sortable/Droppable
- 26. 在销毁回调之前
- 27. 在clojure销毁变量
- 28. 销毁servlet中的会话
- 29. 销毁ruby中的变量
- 30. 销毁Dijit中的微件
的ArrayObjects存储在不同的对象的属性,其中一些得到真正的大(包含包含ArrayObjects等对象ArrayObjects)。数据结构在相同的范围内变得非常消耗内存。 – Gerardo
在这种情况下,使用'unset()'(我相当确定它立即触发GC)或将该变量设置为NULL。它会清理所有的东西。 –