PHP - 如何销毁对象及其包含的对象?

PHP - how to destroy object and objects it contains?

我有一个用 PHP 编写的 CLI 脚本。在此脚本中,我有一个 mainClass 实例,其中包含许多存储在 PHP 数组中的其他类型对象的实例。如何销毁 $mainObject 及其包含的所有对象?

示例代码:

class mainClass
{
    private $_array1 = array();
    private $_array2 = array();
    private $_array3 = array();

    public function __construct($data)
    {
        foreach ($data['a1'] as $val) {
            $this->_array1[] = new Object1($val);
        }
        foreach ($data['a2'] as $val) {
            $this->_array2[] = new Object2($val);
        }
        foreach ($data['a3'] as $val) {
            $this->_array3[] = new Object3($val);
        }
    }
}

$mainObject = new mainClass($data);

function someFunction(mainClass $mainObject)
{
    unset($mainObject);
}
  1. unset($mainObject) 会销毁它和它包含的所有对象吗?
  2. 我必须分别销毁每个对象吗?
  3. 我应该使用 mainClass 的析构函数来销毁 $mainObject 包含的对象(调用它们的析构函数)吗?

您正在寻找 unset()。

但请注意,您不能显式销毁对象。

它将留在那里,但是如果您取消设置该对象并且您的脚本将 PHP 推送到内存限制,则不需要的对象将被垃圾收集。我会使用 unset() (而不是将其设置为 null),因为它似乎具有更好的性能(未测试但记录在 PHP 官方手册的评论之一中)。

话虽如此,请记住 PHP 始终会在提供页面后立即销毁对象。因此,只有在非常长的循环 and/or 大量密集页面上才需要这样做。

请参考此link

Best way to destroy PHP object?

未设置($mainObject);将销毁对象并释放内存。

最佳做法是将该对象初始化为 null。

$mainObject  = NULL;

参考: What's better at freeing memory with PHP: unset() or $var = null