PHP抽象方法与默认方法

时间:2012-09-02 23:47:42

标签: php oop ooad

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

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

如果存在合适的默认实现,我倾向于使用第二种方法。但是我让自己陷入困境吗?

我觉得“抽象”的使用可能是如此限制,所以我想知道我是否遗漏了某些内容......

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:4)

接口(或抽象类)强制与您的类保持一致。这是你和你继承的班级之间的合同。当几个人编写代码并且您希望可靠地交换类时,这种一致性是关键。