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

时间:2014-01-30 16:06:45

标签: php oop

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

编辑:好的,好像这根本不可能:

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

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

2 个答案:

答案 0 :(得分:16)

在php中,__destruct魔术方法必须public。该方法将自动在实例外部调用。将__destruct声明为protectedprivate会导致警告,并且不会调用魔法。

不需要对称,因为你永远不应该明确地调用__destruct

答案 1 :(得分:2)

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

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