Php 在析构函数中取消设置($this)有什么意义吗?

Php 在析构函数中取消设置($this)有什么意义吗?,php,Php,我遇到一门课,立刻引起我注意的是: public function __destruct() { unset($this); } 我的第一个想法是,这纯粹是愚蠢,事实上,它看起来如此愚蠢,以至于我认为,要么真的有很好的理由这样做,要么作者就是无知 有什么想法吗?有什么理由这样做吗?我想不出什么真正的理由。也许可以问问开发者 我的第一个想法是,这纯粹是愚蠢,事实上,它看起来如此愚蠢,以至于我 我认为,要么真的有很好的理由这样做,要么作者就是不知所措 恐怕是后者:在dest

我遇到一门课,立刻引起我注意的是:

public function __destruct() {
        unset($this);
    }
我的第一个想法是,这纯粹是愚蠢,事实上,它看起来如此愚蠢,以至于我认为,要么真的有很好的理由这样做,要么作者就是无知


有什么想法吗?有什么理由这样做吗?

我想不出什么真正的理由。也许可以问问开发者

我的第一个想法是,这纯粹是愚蠢,事实上,它看起来如此愚蠢,以至于我 我认为,要么真的有很好的理由这样做,要么作者就是不知所措

恐怕是后者:在destruct上取消一个实例是没有意义的。这可能是因为最初的程序员非常喜欢显式,但最糟糕的是,这甚至不起作用:

<?php
class Foo {
    function __destruct( ) {
        unset( $this );
    }
}

$foo = new Foo;
$foo->__destruct( );
var_dump( $foo );
简短回答:否


详细回答:考虑到要调用的u destruct方法的触发器,我看不出这有什么意义。发件人:

一旦删除了对特定对象的所有引用,或者对象被显式销毁,或者按照关机顺序的任何顺序,就会调用析构函数方法

还要注意的是,即使手动调用了_destruct方法,它也可能不会执行您期望的操作。发件人:

由于PHP5,无法在对象方法中取消设置$this


一些测试表明,所有这一切都将在_destruct方法中删除对对象的当前$this引用。

在internet上发现了这一点

unset($this)将只从的变量空间中删除$this 当前功能范围。对象将保留在调用方作用域中

但是,您可以使用$this=null来覆盖对象


鉴于析构函数仅在
unset($object)
或未引用对象的垃圾收集上调用,内部
unset($this)
的用处不言而喻

特别是,它本身没有任何效果,因为它只清除名称引用
$this
。它不会释放占用的内存,这是在析构函数离开后发生的

相比之下,有时使用以下方法是明智的:

unset($this->subobject);

这可能是作者错误记忆和误用的地方。

这门课的其他部分看起来像是来自一个以前没有任何编程培训的人。我不知道这是否应该被投票,因为这正是我所想的,或者因为这个事实而投反对票,这是回答一个完全正确的问题的糟糕方式。。。。嘿嘿,游戏…设定…比赛!