私は、2つの異なるソースから結果をフェッチし、それらを結合するために使用している検索クラスを持っています。 Searchクラスは親であり、Searchを拡張する2つの子AとBを持ちます。親オブジェクトを持つ子クラスを作成することは悪い習慣ですか?
Searchクラスでは、2つの子オブジェクトをインスタンス化して結果を取得するfetch()というメソッドがあります。
public function fetch(){
$a = new A($this);
$a_results = $a->fetch();
$b = new B($this);
$b_results = $b->fetch();
// code to combine the results here
}
クラスAとBのコンストラクタの両方が、次のようになります。:私はそれで何か間違ったことをやっているように感じる
class A extends Search
{
public function __construct(Search $search){
parent::__construct($search->category, $search->offset, $search->keywords...);
}
は私が親オブジェクトを渡していることは、次のようになりますその子と同じデータを持つ別の親オブジェクトを作成します。これを設定するより良い方法はありますか?
私のアプリケーションのいくつかの部分は、親Searchクラスではなく、クラスAとBに直接アクセスする必要があるため、この方法で設定しました。
Do AとBの両方でfetchメソッドが実装されていますか?そうでなければ、無限ループになります。 Searchを拡張するのはあなたが探しているものではないようですが、AとBのクラスは単にSearchオブジェクトをその__constructパラメータとして取って、Searchオブジェクトのプロパティを使用するだけです。 – localshred
はい、AとBには異なるロジックを持つfetch()メソッドがあります。おそらく、AとBはSearchを拡張する必要はありませんが、オブジェクトを構築するのに必要なメンバーと同じメソッドを使用するので、Searchに拡張するのは当然です。 –
あなたはそうです、この方法でSearchクラスを拡張するのは無意味です。検索オブジェクトを渡してプロパティにアクセスするだけです。これを回答に入れると、それを受け入れられた解決策としてマークすることができます。 –