我知道,对于一些可能听起来很蠢,但是,我在想,如果我哈瓦在一个类中删除(从数据库和文件系统)中的所有对象数据删除()方法,我怎么能破坏/从内部取出异物类.
这是一个PHP问题.像是unset($this);可能和明智的东西?什么是正确的方法呢?
在开发框架的同时,我也遇到了这样的问题.unset($this)完全不可能,因为$this它只是一个特殊的指针,允许您访问当前对象的属性和方法.
唯一的方法是在方法/函数中封装对象的使用,这样当方法/函数结束时,对对象的引用就会丢失,垃圾收集器会自动释放内存以用于其他事情.
参见示例RaiseFile,一个表示文件的类:
http://code.google.com/p/phpraise/source/browse/trunk/phpraise/core/io/file/RaiseFile.php
在RaiseFile类中,在调用delete()方法并删除文件之后,还应该删除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;
}
Run Code Online (Sandbox Code Playgroud)
注意$f在函数结束后如何删除和GC-ed,因为函数外部没有对RaiseFile对象的引用$f.