我知道对于某些人来说这可能听起来很愚蠢,但我在想如果我在一个删除所有对象数据(从数据库和文件系统)的类中有一个 delete() 方法,我该如何销毁/删除该对象来自类(class)内部。
这是一个 PHP 问题。像 unset($this);
之类的东西是否可行且明智?正确的做法是什么?
最佳答案
在开发框架时,我也遇到了这样的问题。 unset($this)
是完全不可能的,因为$this
只是一个特殊的指针,允许您访问当前对象的属性和方法。
唯一的办法就是将对象的使用封装在方法/函数中,这样当方法/函数结束时,对象的引用就丢失了,垃圾回收器会自动释放内存给其他东西。
参见示例 RaiseFile
,一个表示文件的类:
http://code.google.com/p/phpraise/source/browse/trunk/phpraise/core/io/file/RaiseFile.php
在 RaiseFile 类中,在调用 delete()
method并且文件被删除,RaiseFile 对象也应该被删除。
但是因为你提到的问题,我实际上不得不坚持RaiseFile指向一个文件,不管这个文件是否存在。可以通过 exists()
方法跟踪文件是否存在。
假设我们有一个使用 RaiseFile 表示的剪切粘贴函数:
/**
* Cut and paste a file from source to destination
* @param string $file Pathname to source file
* @param string $dest Pathname to destination file
* @return RaiseFile The destination file
*/
function cutpaste($file, $dest){
$f = new RaiseFile($file);
$d = new RaiseFile($dest);
$f->copy($d);
$f->delete();
return $d;
}
注意 $f
是如何在函数结束后被移除并进行 GC 处理的,因为不再有对 RaiseFile
对象的引用 $f
在函数之外。
关于php - 如何从类中删除一个 PHP 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180446/