是否可以通过执行该特定类的代码来取消(清除或取消实例化)类的对象?
我的场景是,由于某种原因,我达到了一个点,对象没有任何意义存在,所以我想确保通过杀死它在内存中的引用不会再次使用它.
这是一个片段示例:
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",但没有一个工作.
任何想法都非常受欢迎.
干杯,
考虑到您无法明确销毁对象.
允许PHP垃圾收集器对对象进行操作的方法是:
$var = null; // set to null
unset($var); // unset
Run Code Online (Sandbox Code Playgroud)
对象将留在那里.但是,如果取消设置对象并且脚本将PHP推送到内存限制,则不需要的对象将被垃圾回收.我会选择unset(),因为它接缝有更好的性能(没有经过测试,但记录在PHP官方手册的其中一条评论中).
这就是说,请记住,PHP总是在提供页面后立即销毁对象.所以这应该只需要很长的循环和/或密集的页面.