在什么情况下构造函数是私有的还是受保护的?

时间:2013-03-09 20:32:46

标签: php oop constructor

是否会出现__construct()除了公开之外被宣布的情况?

如果是这样,为什么?

3 个答案:

答案 0 :(得分:1)

使构造函数成为私有或受保护的常见示例是实现singleton pattern。 有关PHP示例,请参阅this answer

答案 1 :(得分:1)

在类中使用builder pattern时,以及为类添加static factory methods时,我也使用私有构造函数。

两者都可以帮助您避免创建太多构造函数,还可以帮助您创建具有有意义名称的构造函数。 例如,而不是:

new Robot(2, 4, 255, 0, 0)

您可以使用构建器创建:

RobotBuilder.withNumberOfArms(2).withColor(255,0,0).withNumberOfEyes(2).build()

由于构建器位于类中,因此只能调用其私有构造函数。

对于静态工厂方法,您可以看到以下内容:

public static Robot createFourArmedRobot();
public static Robot createBlindRobot();
对于其他开发人员而言,

对于具有自定义参数的两个构造函数更有意义。 (更多与OOP相关而不是php)

答案 2 :(得分:0)

通常我们将__construct()作为私有的单身模式与设计模式相关,以了解更多信息,请访问此页面 - http://en.wikipedia.org/wiki/Singleton_pattern