(PHP)从类代码中取消设置对象

bru*_*aga 3 php oop

是否可以通过执行该特定类的代码来取消(清除或取消实例化)类的对象?

我的场景是,由于某种原因,我达到了一个点,对象没有任何意义存在,所以我想确保通过杀死它在内存中的引用不会再次使用它.

这是一个片段示例:

class Foo {
    public $bar = "doh!";
    function destroy() {
        // ???    
    }
}
$o = new Foo();
echo $o->bar . '\n';
$o->destroy();
echo $o->bar . '\n'; // I expect an error here...
Run Code Online (Sandbox Code Playgroud)

如果我在类代码之外执行"unset"命令,它显然有效:

$o = new Foo();
unset($o);
echo $o->bar . '\n'; // PHP Notice:  Undefined property: Foo::$bar in ...
Run Code Online (Sandbox Code Playgroud)

但我尝试在"destroy"方法中执行此操作,通过调用"unset"或创建自定义"__destruct",但没有一个工作.

任何想法都非常受欢迎.

干杯,

Fra*_*kie 6

考虑到您无法明确销毁对象.

允许PHP垃圾收集器对对象进行操作的方法是:

$var = null; // set to null
unset($var); // unset
Run Code Online (Sandbox Code Playgroud)

对象将留在那里.但是,如果取消设置对象并且脚本将PHP推送到内存限制,则不需要的对象将被垃圾回收.我会选择unset(),因为它接缝有更好的性能(没有经过测试,但记录在PHP官方手册的其中一条评论中).

这就是说,请记住,PHP总是在提供页面后立即销毁对象.所以这应该只需要很长的循环和/或密集的页面.