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

3

假设一个对象具有大量数据的属性,在析构函数中取消设置这些属性,是否比让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
        );
    }
}

你有一些示例代码可以展示你的意思吗? - Clément Malet
展示你当前的工作代码! - VIVEK-MDU
@ClémentMalet,我更新了我的问题。 - Behzadsh
@VIVEK-MDU,实际上这正是我正在思考的问题,我还没有可用的代码,但我已经在我的问题中更新了一个示例代码。 - Behzadsh
2个回答

2

将变量赋值为null比解除变量引用更好。这样可以更快,并且如果有其他变量引用你要解除的变量,赋值为null实际上会释放内存,而解除变量引用不会 - 其他变量仍将具有数据而非null值。


1

好的,为了简单起见:不,你真的不应该这样做。

如果只是为了释放一些内存而取消设置变量,请让PHP自行处理对象及其变量的析构过程。

1)你永远无法确定使用unset取消设置变量是否会直接释放已用内存。它可能是即时的(但实际上不是,这取决于垃圾回收器何时决定执行它的工作),也可能在稍后或脚本结束时通过垃圾回收器回收内存。这并不能确保释放内存。

2)变量的可访问性不会改变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接