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 新手入门教程
Aug 03 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
PHP PDO函数库详解
Apr 27 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
Oct 24 PHP
php获取图片信息的方法详解
Dec 10 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
php使用scandir()函数扫描指定目录下所有文件示例
Jun 08 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
PHP dirname功能及原理实例解析
Oct 28 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定时更新程序设计思路分享
2014/06/10 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
javascript 写类方式之六
2009/07/05 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
给男朋友的道歉信
2014/01/12 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
专题组织生活会方案
2014/06/15 职场文书
文明倡议书
2015/01/19 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
英语教师个人工作总结
2015/02/09 职场文书
求职自我评价范文
2015/03/09 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书