在析构函数中取消设置对象属性是否更有效?

时间:2014-08-19 06:00:40

标签: php performance destructor

假设一个对象具有大量数据的属性,在析构函数中取消设置属性是否更有效?或者让php释放该对象分配的内存?

class A {
    protected $foo;
    protected $bar;
    protected $baz;

    public function __construct()
    {
        $this->foo = big_amount_of_data();
        $this->bar = reference_to_a_big_object();
        $this->foo = data_from_big_file();
    }

    public function doProcess()
    {
        // do something
    }

    public function __destruct()
    {
        // Should I do this?
        unset(
            $this->foo,
            $this->bar,
            $this->baz
        );
    }
}

2 个答案:

答案 0 :(得分:1)

好的,这样简单:不,你不应该这样做。

当你破坏它时,你最好让PHP用你的对象及其变量做它想做的事情,如果它是关于取消设置变量以取回一些内存的话。

1)您永远不会确定使用unset的未设置变量会直接返回已用内存。它可能是即时的(并且仍然,不是真的,它只取决于垃圾收集器何时决定完成他的工作),无论如何,它可能是一段时间之后或者在脚本的最后,这要归功于垃圾收集器。它不是一个确定的方式来恢复记忆,这就是它。

2)变量可访问性没有变化

答案 1 :(得分:0)

分配null优于取消设置。它更快,如果有其他变量引用您未设置的变量,分配null将实际释放内存,而取消设置则不会 - 其他变量仍然具有数据而不是空值