PHP抽象方法与默认方法

Kim*_*nce 5 php oop ooad

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

如果我将父方法定义为具有默认实现的具体方法,那么我可以覆盖父方法而不遵守其接口.

在存在合适的默认实现的情况下,我倾向于使用第二种方法.但我是否让自己陷入困境?

对我来说,"抽象"的使用可能是如此限制似乎很奇怪,所以我想知道我是否遗漏了一些东西......

注意 - 我看到类似的问题已经被问到与其他语言相关,但不是PHP.

zer*_*kms 7

这是一个非常广泛的问题,但用几句话来说:

如果你不尊重接口 - 它会创建脆弱的设计,因为即使根据定义,每个子节点都应该支持所有的祖先接口 - 你打破它,然后定义不兼容的接口.

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

此外,它通常是一个标志,你应该更喜欢委托而不是继承.