php - 如何从类中删除一个 PHP 对象?

标签 php oop

我知道对于某些人来说这可能听起来很愚蠢,但我在想如果我在一个删除所有对象数据(从数据库和文件系统)的类中有一个 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/

相关文章:

php - mysql-php查询列表建表

PHP 表 - 如何在从数据库中提取的表的每一行上添加不同的超链接

php - 使用 ffmpeg 将视频转换为 flv 格式在本地工作但在服务器中不工作

c++ - 如何为 C++ 中的每个类初始化返回相同的实例?

python - 在 Python 中构建 API 调用

javascript - 为什么 setter 方法对我的 JavaScript 对象中的其他变量没有任何影响?

php - Elementor Pro 表单到 webhook 集成的示例

php - 浏览器关闭时显示弹出窗口

c++ - 我如何在其他类(或任何类)中使用抽象类?

algorithm - 分割链表