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 相关文章推荐
xml+php动态载入与分页
Oct 09 PHP
php getsiteurl()函数
Sep 05 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
深入解析php中的foreach问题
Jun 30 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 PHP
laravel5.1框架model类查询的实现方法
Oct 08 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 开源AJAX框架14种
2009/08/24 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
thinkphp分页实现效果
2016/10/13 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
brook javascript框架介绍
2011/10/10 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python实现批量下载图片的方法
2015/07/08 Python
Saltstack快速入门简单汇总
2016/03/01 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
文员个人的求职信范文
2013/09/26 职场文书
授权委托书怎么写
2014/04/03 职场文书
活动总结模板
2014/05/09 职场文书
宣传普通话标语
2014/06/27 职场文书
运动会演讲稿200字
2014/08/25 职场文书
房屋认购协议书
2015/01/29 职场文书
水电工岗位职责
2015/02/14 职场文书
高中体育课教学反思
2016/02/16 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
MySQL RC事务隔离的实现
2022/03/31 MySQL