在PHP中释放对象

时间:2011-02-22 21:17:59

标签: php oop

我是PHP新手(通常是写软件)。我已经读过,当一个对象超出范围时,它将被释放,所以不需要手动完成。但是,如果我有一个类似的脚本:

while ($var == 1) {
    $class = new My_Class();
    //Do something

    if ($something) {
        break;
    }
}

这个脚本将循环,直到$something为真,在我看来会创建很多$class的实例。我需要在每次迭代结束时释放它吗?同一个var名称会重新引用自己吗?如果我确实需要释放它,unset()会满足吗?

感谢。

3 个答案:

答案 0 :(得分:3)

将新实例分配给变量时,该变量引用的旧实例(如果有)的reference count减少了。在这种情况下,引用计数将变为零。由于它不再被引用,它将被自动清理。

从PHP 5.3开始,有一个适当的garbage collector,它也可以处理循环引用。您可以致电gc_enable启用它。

答案 1 :(得分:2)

在这种情况下,unset()它没有必要,因为它将在循环的每次迭代中被覆盖。根据{{​​1}}循环中正在执行的其他操作,可能最好在循环外指定while$class每次迭代都会改变吗?

$class

答案 2 :(得分:2)

除非:循环将运行很长时间;您预计会有大量并发用户;或者服务器上的资源有限(即自托管,VPS /共享等),那么您不必担心它。在任何脚本不会运行很长时间(少于5秒)的情况下,你试图释放内存的任何东西都不如PHP的垃圾收集器那么有效。

也就是说,如果您需要清除引用(因为上述场景之一,或者因为您想要整洁),可以将变量设置为null或使用unset函数。这将删除引用,PHP的垃圾收集器将清理它,因为没有更多的引用。