假设一个对象具有大量数据的属性,在析构函数中取消设置属性是否更有效?或者让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
);
}
}
答案 0 :(得分:1)
好的,这样简单:不,你不应该这样做。
当你破坏它时,你最好让PHP用你的对象及其变量做它想做的事情,如果它是关于取消设置变量以取回一些内存的话。
1)您永远不会确定使用unset
的未设置变量会直接返回已用内存。它可能是即时的(并且仍然,不是真的,它只取决于垃圾收集器何时决定完成他的工作),无论如何,它可能是一段时间之后或者在脚本的最后,这要归功于垃圾收集器。它不是一个确定的方式来恢复记忆,这就是它。
2)变量可访问性没有变化
答案 1 :(得分:0)
分配null优于取消设置。它更快,如果有其他变量引用您未设置的变量,分配null将实际释放内存,而取消设置则不会 - 其他变量仍然具有数据而不是空值