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


Is it more efficient to unset an object properties in 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
        );
    }
}

分配null比取消设置更好。它更快,如果有其他变量引用你要取消设置的变量,赋值为null实际上会释放内存,而取消设置不会-其他变量仍然具有数据和非空值

简单来说:不,你不应该那样做。

你最好让PHP对你的对象和它的变量做它想做的,当你销毁它,如果它只是为了恢复一些内存。

1)您永远无法确定使用unset取消变量将直接返回已使用的内存。它可以是即时的(但也不是真的,它只是取决于垃圾收集器何时决定执行它的工作),也可以是几段时间之后,或者在脚本的最后,由于垃圾收集器的存在。这不是一个确定的方法来获得记忆,就是这样。

2)变量可访问性不变