是否可以将析构函数声明为私有?

2022-08-30 22:17:41

我的一些类将其构造函数声明为私有,因为此类的对象只允许由该类的静态方法创建。我是否也可以将其构造函数声明为私有以保持其对称,它安全吗?

编辑:好吧,似乎这根本不可能:

Fatal error: Call to private AClass::__destruct() from context '' in /script on line 0

(上下文是空的,没有第 0 行这样的东西)。出于某种原因,我曾经认为PHP运行时是全能的,可以破坏它想要的任何东西。


答案 1

在 php 中,魔术方法必须是 。该方法将自动从外部调用到实例。声明为 或 将导致警告,并且不会调用 magic 方法。__destructpublic__destructprotectedprivate

没有必要对称,因为您永远不应该显式调用 。__destruct


答案 2

似乎您正在实现单例模式。在此模式中,构造函数必须是私有的,并且您有一个返回类的实例的静态方法。如果没有实例,此静态方法将创建它并返回它。

如果将析构函数访问设置为 private,则不允许其他类或函数来析构该实例,如果在应用程序的某个执行点中不再使用该实例,则可能会不一致。没有理由将析构函数设置为 private,因为即使它是公共的,如果没有人,静态方法也能够返回新实例。


推荐