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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
PHP网站备份程序代码分享
Jun 10 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 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数组函数
2008/08/18 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
新手入门常用代码集锦
2007/01/11 Javascript
短信提示使用 特效
2007/01/19 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
Node.js的特点详解
2017/02/03 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python实现按日期归档文件
2021/01/30 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
出纳试用期自我鉴定
2014/04/07 职场文书
文明礼仪标语
2014/06/13 职场文书
英语教师求职信
2014/06/16 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
办公用品管理制度
2015/08/04 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏