类实例可以自毁吗?

时间:2010-07-15 22:13:50

标签: php oop

PHP对象实例是否有可能销毁/取消自身?假设我有一个代表文件的类,然后我随后使用该类删除该文件。我可以以某种方式从一个自己的方法中取消设置实例吗?

$file = new FileClass();

$file->copy('/some/new/path/');
$file->delete();

// ... at this point $file would be seen as unset.

3 个答案:

答案 0 :(得分:14)

不,不可能从一个不合逻辑的范围内破坏一个类。 unset($this)将无效(至少不如预期)。

为什么不使用

unset($file);

并定义__destruct函数,您可以在其中执行通常在delete中执行的任务?

答案 1 :(得分:4)

或者,您可以限制$ file的范围,以便在不再使用时收集垃圾:

call_user_func(function() {
  $file = new FileClass();
  $file->copy('/some/new/path/');
  $file->delete();
});

// ... at this point $file would be seen as unset.

答案 2 :(得分:0)

这是我能想到的唯一解决方案:

function delete($var_name) {
   unset($GLOBALS[$var_name]);
}

然后你做:

$file->delete('file');

无论如何,一堂课不能自杀(没有外界的帮助)。