2

これはそれほど問題ではなく、より多くのベストプラクティスの質問です。これらは意見の対象となることは知っていますが、この特定の問題には標準的な規則が必要であると確信しています。

Account2つのクラスがあるとしましょうAssociate

Accountに役立ついくつかのメソッドが含まれているので、当然、クラスをにAssociate拡張します。AccountAssociate

ただし、同じ名前のメソッドが2つある場合は、もちろん問題が発生しcreate()ます。

これまで、親クラスを拡張する代わりにこれに対抗するために、子クラス__construct()メソッドの変数としてインスタンス化し、それを介してメソッドを呼び出してきました$this->Account->create();

別の方法はありますか?たとえば、子クラスに同じ名前のメソッドを保持しながら、拡張クラスのメソッドを使用するための標準はありますか?

どんな答えでも大歓迎です!

4

2 に答える 2

1

Accountには、Associateに役立ついくつかのメソッドが含まれているため、当然、AccountクラスをAssociateに拡張します。

いいえ、これは当然ではありません。継承を悪用しています。それとも、アソシエイトアカウントだと思いますか?アカウントがある場合は、 compositionを使用します。そうでない場合でも、アカウントクラスにアソシエートクラスに役立つメソッドがある場合、それらはおそらくアカウントクラスに含まれるべきではありません。アカウントとアソシエートの両方が使用できる1つ以上の他のクラスにそれらを抽出します。

于 2013-02-25T08:05:51.203 に答える
0

$this子クラスメソッド内にいる場合は、を使用して子クラスメソッドが呼び出されます。ただし、親メソッドが必要な場合はparent::create();、子メソッド内から呼び出します。

しかし、それはどうしてもAccountクラスを拡張する必要がある場合であり、これは不要に聞こえます。「Account」クラスにパブリックメソッドがある場合は、それを拡張する必要はありません。クラスをインスタンス化した後でそれらを呼び出すことができます。

$account = new Account();
$account->create();

または、パブリック静的メソッドの場合:

$creation = Account::create();
于 2013-02-25T07:25:38.327 に答える