3

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

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

我知道可以调用 parent::__construct(),但这样我就不会强制使用这种模式。如果我的一位同事正在实现一个扩展我的抽象类的新类,我不希望有任何混淆。当然,一切都记录在案,但你们都知道阅读内容的过程;-)

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

谢谢!尼克

4

3 回答 3

9

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

public final function __construct(){}

在这个构造函数中,你可以调用你的 init() 方法。

于 2012-07-12T14:12:56.630 回答
1

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

于 2012-07-12T14:07:40.097 回答
1

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

于 2012-07-12T14:07:53.263 回答