douqianmin5367 2012-09-02 23:47
浏览 75
已采纳

PHP抽象方法与默认方法

I notice that when I define a method as abstract, the signature of child classes needs to be compatible with it. This robs me of an opportunity to use the type checking in the child class' signature.

If I define the parent method as a concrete method with a default implementation, I can then override the parent method without complying with its interface.

In cases where a suitable default implementation exists, I am inclined to use the second approach. But am I letting myself in for trouble?

It just seems odd to me that the use of 'abstract' can be so limiting, so I want to know if I'm missing something...

Note - I see that similar questions have been asked in relation to other languages, but not so much PHP.

  • 写回答

2条回答 默认 最新

  • doudi2431 2012-09-02 23:53
    关注

    This is a very broad question, but in few words:

    If you don't respect interfaces - it creates the fragile design, because even though by definition each child should support all the ancestor interfaces - you break it, bu defining incompatible interfaces.

    There is a good law about that: http://en.wikipedia.org/wiki/Liskov_substitution_principle

    Also, it's often a sign, that you should prefer delegation over inheritance.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?