5

メソッドを抽象として定義する場合、子クラスのシグネチャはそれと互換性がある必要があることに気付きました。これにより、子クラスの署名で型チェックを使用する機会が失われます。

親メソッドをデフォルトの実装を持つ具象メソッドとして定義すると、そのインターフェイスに準拠せずに親メソッドをオーバーライドできます。

適切なデフォルトの実装が存在する場合、私は2番目のアプローチを使用する傾向があります。しかし、私はトラブルのために自分自身を入れていますか?

'abstract'の使用が非常に制限されているのは奇妙に思えるので、何かが足りないかどうか知りたいです...

注-他の言語に関しても同様の質問がなされているようですが、PHPはそれほど多くありません。

4

2 に答える 2

7

これは非常に幅広い質問ですが、簡単に言うと次のようになります。

インターフェイスを尊重しない場合(定義上、各子はすべての祖先インターフェイスをサポートする必要があるため、壊れやすい設計になります)、互換性のないインターフェイスを定義すると、インターフェイスが壊れます。

それについては良い法則があります:http://en.wikipedia.org/wiki/Liskov_substitution_principle

また、継承よりも委任を優先する必要があることを示す兆候であることがよくあります。

于 2012-09-02T23:53:39.030 に答える
4

インターフェイス(または抽象クラス)は、クラスとの一貫性を強制します。それはあなたとあなたが継承するクラスとの間の契約です。この一貫性は、複数の人がコードを記述していて、クラスを確実に交換したい場合に重要です。

于 2012-09-02T23:54:49.117 に答える