私は最近、特定のケースで実際にやりたいこと (super を呼び出す) がアンチパターンであることに気付きました。( http://en.wikipedia.org/wiki/Call_super )
だから私の質問は:
次のことを行う方法 (ほとんどの人が必要とする基本的なことで、オブジェクトに詳細を追加します)。オブジェクト var に保持されている配列に新しい要素を追加するだけです。
<?php
class A {
// bla bla bla
public function __construct() {
$this->_data['newDetail'] = "Ipiicaei";
}
}
class B extends A {
// bla bla bla
// Override constructor, I need to add one more detail for this class
public function __construct() {
parent::__construct();
$this->_data['newDetailSubcls'] = "Something";
}
}
さて...最初の要素を追加するために親クラスのコンストラクターを呼び出さない場合、2 つの可能性があります。
各サブクラスで、親が通常実行しているコードの一部を追加し、親から削除します。したがって、999 クラスで拡張すると、999* 行が親に複製されます。私には悪いように聞こえます。
子に実装されている親からメソッドを呼び出します(テンプレートメソッドパターン、推奨事項)。したがって、それを追加するクラスが 1 つだけ必要で、残りの 998 個が親とまったく同じように動作する必要がある場合は、それぞれに空の関数を追加します。これも私には悪いように聞こえます。
私の例は単純ですが (これが例のあり方です)、親クラスやサブクラスが複雑なことを行う可能性があることに注意してください。
call super が状況によっては良くない理由がわかります。しかし、これは私には問題ないようです。
では、どのようにアプローチしますか?call super がアンチパターンであることを無視して、私と同じようにしますか (または、私の方法が悪いことが判明した場合は、以前はそうしていましたか)? または...どのように?