使用后我是否需要在PHP中销毁对象?

时间:2012-06-23 15:32:01

标签: php object

PHP中的对象破坏有多重要?使用它们后在PHP中销毁对象很重要吗?因为与java不同,PHP没有垃圾收集器(我所知道的没有)

5 个答案:

答案 0 :(得分:13)

在一般情况下,您不需要销毁对象,PHP肯定是does have a garbage collector。而且,大多数简单的脚本甚至都不需要,因为整个环境都被拆除并为每个HTTP请求重建;垃圾收集器可以帮助那些在提供单个请求时内存不足的脚本。

一般情况的例外情况:

您可能希望“丢失”对占用大量内存和/或包装非托管资源的对象的所有引用;这通常就像

一样简单
$largeObject = null; // reference to previous value lost

如果那是$largeObject的最后一次引用,那么:

  • PHP将立即调用析构函数(如果存在);如果您的脚本是长期存在的话,您可能希望对包装非托管资源的对象(例如数据库连接,套接字等)执行此操作。
  • 对象占用的内存现在可以进行垃圾回收。但是,收集不会在现场发生,而是在稍后需要更多内存的地方发生(尽管您可以随时调用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>