3

PHPで、クラスのコンストラクターをオーバーライドする機能を「無効にする」ことは可能ですか?

シナリオを明確にするために、コンストラクターを持つ抽象クラス A があります。このコンストラクターは、クラスの動作に不可欠です。次に、抽象クラス A を「拡張」する「兄弟」がいくつかあります。明らかに、それらはそのクラスを拡張する必要がありますが、コンストラクターに触れさせたくありません。

parent::__construct() を呼び出すことが可能であることは知っていますが、その方法ではそのパターンを強制しません。私の同僚が私の抽象クラスを拡張する新しいクラスを実装している場合、混乱がないようにしたくありません。もちろん、すべてが文書化されていますが、読み物に関してはどうなるか知っています;-)

コンストラクターのオーバーライドを無効にする方法についてのアイデアはありますか? (その場合、オーバーライドできる抽象 init() メソッドを作成しますが、「抽象コンストラクタ」はそれを呼び出します)。または、この必要な状況を実装するための他のアイデアはありますか?

ありがとう!ニーク

4

3 に答える 3

9

クラスがabstractの場合、コンストラクターを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 に答える