PHP面向对象之里氏替换原则简单示例


Posted in PHP onApril 08, 2018

本文实例讲述了PHP面向对象之里氏替换原则。分享给大家供大家参考,具体如下:

里氏替换原则(Liskov Substitution Principle)

里氏替换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。里氏替换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

使用里氏替换原则时需要注意,子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。

通过一段代码了解

<?php
//例子1
class Bird{
  protect function fly(){
  }
}
//翠鸟
class KingFisher extends Bird{
}
//鸵鸟
class Ostrich extends Bird{
  //鸵鸟不会飞啊
}
//例子2
class A{
  protect function add($a, $b){
    return $a + $b;
  }
} 
//重载
class B extends A{
  protected function add($a, $b){
    return $a + $b + 100;
  }
}
?>

里氏替换原则是对类继承的一种约束。对里氏替换原则有两种理解:

1. 不能随便去继承不合适的,有多余方法或者属性的类。(例子1)

2. 子类可以扩展父类的功能,但不能改变父类原有的功能。(例子2)

里氏替换原则包含一下几个隐藏含义:

① 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。

② 子类中可以增加自己特有的方法。

③ 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

④ 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
一段php加密解密的代码
Jul 16 PHP
php 获取可变函数参数的函数
Aug 26 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
php数组转成json格式的方法
Mar 09 PHP
php实现的操作excel类详解
Jan 15 PHP
php自定义函数实现二维数组排序功能
Jul 20 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP反射实际应用示例
Apr 03 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 #PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 #PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 #PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 #PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 #PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 #PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 #PHP
You might like
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
php常用字符串比较函数实例汇总
2014/11/24 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
javascript的push使用指南
2014/12/05 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
JavaScript入门基础
2015/08/12 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
javascript表单正则应用
2017/02/04 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
Python元字符的用法实例解析
2018/01/17 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
一份Java笔试题
2012/02/21 面试题
总经理职责
2013/12/22 职场文书
周鸿祎:教你写创业计划书
2013/12/30 职场文书
文体活动总结范文
2014/05/05 职场文书
仲裁协议书
2014/09/26 职场文书
拾金不昧感谢信
2015/01/21 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
Python中的 Set 与 dict
2022/03/13 Python
带你了解Java中的ForkJoin
2022/04/28 Java/Android