【问题标题】:PHP Abstract Method versus Default MethodPHP 抽象方法与默认方法
【发布时间】:2012-08-27 18:22:33
【问题描述】:

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

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

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

我觉得“抽象”的使用如此有限,所以我想知道我是否遗漏了什么......

注意 - 我看到有人问过与其他语言相关的类似问题,但没有那么多 PHP。

【问题讨论】:

标签: php oop ooad


【解决方案1】:

这是一个非常广泛的问题,但简单来说:

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

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

此外,这通常表明您应该更喜欢委托而不是继承。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 2017-10-12
      • 2014-10-05
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 2020-05-14
      相关资源
      最近更新 更多