我遇到了一个班级,我的注意力立刻就是这个:
public function __destruct() {
unset($this);
}
我的第一个想法是,这只是简单的愚蠢,事实上它看起来很愚蠢,我认为要么真的有这么好的理由,要么作者只是无能为力
有什么想法?有什么理由这样做吗?
答案 0 :(得分:16)
简答:否
答案很长:Noooooooooooooooooooooo
答案 1 :(得分:6)
我的第一个想法是,这只是简单的愚蠢,事实上它看起来如此愚蠢,我 我认为要么真的有理由这样做,要么作者只是一无所知。
后者,我担心:在破坏实例时没有任何意义。可能原始程序员是明确的忠实粉丝,但最糟糕的是这甚至不起作用:
<?php
class Foo {
function __destruct( ) {
unset( $this );
}
}
$foo = new Foo;
$foo->__destruct( );
var_dump( $foo );
答案 2 :(得分:2)
鉴于析构函数仅在unset($object)
或未引用对象的垃圾集合上调用,内部unset($this)
的有用性是非常自我解释的。
特别是它本身没有效果,因为它只清除名称引用$this
。它不释放占用的内存,这是在析构函数离开后发生的。
相比之下,使用有时是明智的:
unset($this->subobject);
这可能是作者在这里错误记录和误用的。
答案 3 :(得分:1)
我无法想到这一点。也许向开发者询问一下。
答案 4 :(得分:0)
考虑到要调用__destruct方法的触发器,我看不出这一点。来自http://www.php.net/manual/en/language.oop5.decon.php:
只要删除了对特定对象的所有引用,或者在关闭序列中明确销毁对象或以任何顺序,就会调用析构函数方法。
另请注意,即使手动调用__destruct方法,它也可能无法达到预期效果。来自http://php.net/manual/en/function.unset.php:
从PHP 5开始,无法在对象方法中取消设置$ this。
一些测试显示,所有这一切都将删除__destruct方法中对象的当前$ this引用。
答案 5 :(得分:0)
在互联网上找到这个。
unset($ this)只会从变量空间中删除$ this 当前功能范围。该对象将保留在调用者范围内。
然而,您可以执行$ this = null来覆盖对象。
http://bytes.com/topic/php/answers/459538-oop-unset-maybe-unset#post1762212