PHP - 如何销毁它包含的对象和对象?

时间:2015-04-09 09:44:24

标签: php destructor

我有一个用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包含的对象(调用它们的析构函数)吗?

3 个答案:

答案 0 :(得分:3)

你正在寻找unset()。

但请注意,您无法明确销毁对象。

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

那就是说要记住,PHP总是在提供页面时销毁对象。所以这应该只需要很长的循环和/或密集的页面。

请参阅此链接

Best way to destroy PHP object?

答案 1 :(得分:2)

未设置($ mainObject);将破坏对象和内存将是免费的。

答案 2 :(得分:2)

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

$mainObject  = NULL;

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