PHP中的对象破坏有多重要?使用它们后在PHP中销毁对象很重要吗?因为与java不同,PHP没有垃圾收集器(我所知道的没有)
答案 0 :(得分:13)
在一般情况下,您不需要销毁对象,PHP肯定是does have a garbage collector。而且,大多数简单的脚本甚至都不需要,因为整个环境都被拆除并为每个HTTP请求重建;垃圾收集器可以帮助那些在提供单个请求时内存不足的脚本。
您可能希望“丢失”对占用大量内存和/或包装非托管资源的对象的所有引用;这通常就像
一样简单$largeObject = null; // reference to previous value lost
如果那是$largeObject
的最后一次引用,那么:
gc_collect_cycles
强制进行垃圾收集)。当然,在“服务请求然后退出”的典型情况下,并未考虑所有这些。
答案 1 :(得分:1)
通常,这不是您必须考虑的问题。 这篇文章是关于一个遇到这个问题的人。
http://paul-m-jones.com/archives/262
你可以使用这个函数在类中破坏你喜欢的任何对象。
function __destruct()
{
//do stuff
}
对象可以在请求期间保留在内存中, 或者从命令行调用时,只要脚本仍在运行。
答案 2 :(得分:0)
内置Garbage Collection(也称为GC)机制是PHP 5.3的一部分。
<?php
gc_enable(); // Enable Garbage Collector
var_dump(gc_enabled()); // true
var_dump(gc_collect_cycles()); // # of elements cleaned up
gc_disable(); // Disable Garbage Collector
?>
希望它有所帮助! :)
答案 3 :(得分:0)
Php有一个垃圾收集器,但实际上在很多情况下,php在执行unset
函数之前不会释放内存。这些案例是关于singleton,xml,可能是fabric。在我们公司,我们修补了php并记录了所有内存分配并为代码添加了未设置的功能。
但在网络开发方面,这并不是那么重要。
答案 4 :(得分:0)
正如其他人所说,垃圾收集会在执行结束时完成工作,但是如果你有一个长时间运行的cron,那么当你处理大量数据或大量数组时,你可能会遇到问题。
此时的解决方案是使用unset($ object)调用对象magic __destruct()函数,如果你想对对象做任何事情(比如在数据库中保存数据),你可以使用它。 / p>