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 相关文章推荐
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
php将金额数字转化为中文大写
Jul 09 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
yii2 resetful 授权验证详解
May 18 PHP
详细解读php的命名空间(二)
Feb 21 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 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
那些年一起学习的PHP(一)
2012/03/21 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Python最长公共子串算法实例
2015/03/07 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
python读取xlsx的方法
2018/12/25 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
应聘护士求职信
2014/07/21 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
校园之声广播稿
2015/08/18 职场文书
导游词之张家界
2019/10/31 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang