禁止重载PHP类构造函数

时间:2012-07-12 14:05:01

标签: php oop override

是否有可能 - 在PHP中 - “禁用”覆盖类的构造函数的功能?

只是为了使场景清晰: 我有一个抽象类A,带有构造函数。这个构造函数对于类的工作是必不可少的。 然后我有一些“兄弟姐妹”,“扩展”抽象类A.他们 - 虔诚地 - 必须扩展该类,但我不希望他们触及构造函数。

我知道可以调用parent :: __ construct(),但这样我就不会强制使用该模式。在我的同事正在实施扩展我的抽象类的新类的情况下,我不希望没有混淆。当然,所有内容都有记载,但是在阅读内容时你们都知道它是怎么回事; - )

有关如何禁用构造函数覆盖的任何想法? (在这种情况下,我会创建一个可以覆盖的抽象init()方法,但是我的“抽象构造函数”将对其进行调整)。或者任何其他想法来实现这种想要的情况?

谢谢! NIEK

3 个答案:

答案 0 :(得分:9)

当你的类是抽象的时,你可以将构造函数声明为final。

public final function __construct(){}

在这个构造函数中,你可以称之为init()方法。

答案 1 :(得分:1)

将代码从构造函数移动到另一个方法。构造函数不应包含任何逻辑,只能通过参数初始化变量,赋予构造函数 http://misko.hevery.com/code-reviewers-guide/flaw-constructor-does-real-work/

答案 2 :(得分:1)

您可以检查哪个类调用了构造函数,以及是否是您执行构造代码的父类,否则您不是