【发布时间】:2012-06-25 14:38:05
【问题描述】:
PHP 中的对象销毁有多重要?使用 PHP 后销毁对象重要吗?因为与 java 不同,PHP 没有垃圾收集器(我不知道)
【问题讨论】:
-
PHP 肯定有垃圾收集器。
-
PHP 5.3 中有一个内置的Garbage Collection(也称为GC)机制。
PHP 中的对象销毁有多重要?使用 PHP 后销毁对象重要吗?因为与 java 不同,PHP 没有垃圾收集器(我不知道)
【问题讨论】:
一般情况下你不需要销毁对象,PHP 肯定是does have a garbage collector。此外,大多数简单的脚本甚至都不需要,因为每个 HTTP 请求都会拆除和重建整个环境;垃圾收集器帮助那些在处理单个请求时内存不足的脚本。
您可能希望“丢失”对消耗大量内存和/或包装非托管资源的对象的所有引用;这通常很简单
$largeObject = null; // reference to previous value lost
如果这是对$largeObject 的最后一次引用,那么:
gc_collect_cycles 强制进行垃圾收集)。当然,在“服务请求然后退出”的典型情况下,所有这些都没有考虑到。
【讨论】:
通常这不是您必须考虑的问题。 这是一篇关于遇到此问题的人的文章。
http://paul-m-jones.com/archives/262
您可以使用此函数来销毁您喜欢的类中的任何对象。
function __destruct()
{
//do stuff
}
一个对象可以在请求期间保留在内存中, 或者从命令行调用时,只要脚本保持运行。
【讨论】:
有一个内置的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
?>
希望对您有所帮助! :)
【讨论】:
php 有一个垃圾收集器,但实际上有很多情况下 php 直到 unset 函数被执行时才释放内存。这些案例是关于单例,xml,可能是结构。在我们公司,我们修补了 php 并记录了所有内存分配,并在代码中添加了 unset 函数。
但在 Web 开发中,这并不是那么重要。
【讨论】:
正如其他人所建议的那样,垃圾收集将在执行结束时完成这项工作,但是如果您有一个长时间运行的 cron,那么当您处理大量数据或大型数组时,您可能会遇到问题。
此时的解决方案是使用 unset($object) 调用对象魔法 __destruct() 函数,如果您想对对象执行任何操作(例如将数据保存在数据库中),您可以使用该函数。
【讨论】: