PHP抽象方法与默认方法


PHP Abstract Method versus Default Method

我注意到,当我将一个方法定义为抽象时,子类的签名需要与它兼容。这使我失去了在子类签名中使用类型检查的机会。

如果我将父方法定义为具有默认实现的具体方法,那么我可以在不遵守其接口的情况下重写父方法。

在存在合适的默认实现的情况下,我倾向于使用第二种方法。但我是不是让自己惹麻烦了?

对我来说,"抽象"的使用可能如此有限,这似乎很奇怪,所以我想知道我是否错过了什么。。。

注意——我看到其他语言也有类似的问题,但PHP不多。

这是一个非常宽泛的问题,但用几个词来说:

如果你不尊重接口——这会造成脆弱的设计,因为即使根据定义,每个子代都应该支持所有的祖先接口——你也会破坏它,而不是定义不兼容的接口。

有一条很好的法律:http://en.wikipedia.org/wiki/Liskov_substitution_principle

此外,这通常是一个迹象,表明你应该更喜欢委托而不是继承。

接口(或抽象类)强制实现与类的一致性。这是你和你继承的类之间的一份契约。当几个人在编写代码,并且您希望可靠地交换类时,这种一致性是关键。