PHP 析构函数

2025年04月17日 | 阅读 4 分钟

析构函数是一个特殊函数,用于在对象不再需要时清理或释放资源。虽然它补充了构造函数的工作,但在 PHP 类中声明析构函数是可选的。但是,建议声明析构函数,尤其是在定义了构造函数的情况下。与构造函数不同,析构函数不会被直接调用;相反,当不再有对该对象的引用时,它们会被自动调用。

PHP 析构函数如何工作?

当对象不再需要时,它会被垃圾收集器移除,垃圾收集器本质上控制着析构函数。它不接受任何参数。此技术还用于清理资源并为进一步的 存储 释放 内存。同一个类中只有一个析构函数,并且无法通过 重载 来实现析构函数。它的另一个独特之处在于,即使脚本已通过 exit() 命令终止执行,析构函数仍会被调用。

语法

PHP 析构函数示例

为了进一步理解析构函数,让我们看几个例子

示例 1

在此示例中,我们首先构建一个简单的构造函数,然后执行析构函数来删除它。

示例

立即执行

输出

Constructor is called.
Object of class CleanupDemo is being destroyed.

示例 2

在此示例中,我们设计了一个名为 Employee 的类,该类通过构造函数接受两个参数来初始化员工 数据:员工的名字和姓氏。当对象准备好销毁时,通常在脚本结束时,析构函数用于自动执行清理操作。此外,还提供了一种显示员工全名的方法。

示例

立即执行

输出

Creating Employee object...
Full Name: Harry Potter
Destroying Employee object...

示例 3

此示例演示了 PHP 析构函数如何工作,尤其是在处理对象之间的循环引用时。它还展示了如何使用 PHP 的垃圾收集器来释放内存。创建了两个 Example 类实例并使它们相互引用,然后我们断开全局引用。之后,创建了两个没有循环引用的新对象,以显示当不再有引用时析构函数是如何自动触发的。

示例

立即执行

输出

Destroying: Example 3
Destroying: Example 4
End of script.

注意:由于“示例 1”和“示例 2”创建了循环引用,因此除非手动触发垃圾回收(使用 gc_collect_cycles()),否则它们可能不会运行。

析构函数的优点

  • 通过帮助释放内存分配,析构函数可确保为构造函数创建的新对象提供必要的空间量,或为其他任务释放资源。
  • 确保所有任务高效运行,因为它负责清理过程。
  • 通过释放内部资源,在分配大量 变量 和结构的情况下,使用析构函数将有助于避免内存泄漏。

结论

正如我们所见,析构函数与构造函数相反,用于在对象完成其目的且不再需要时从存储中清理对象。因此,它确保清除不需要的资源,并为新对象腾出存储空间。通过声明 __destruct() 方法,PHP 将在脚本完成后自动调用它。


下一个主题PHP 中的继承