PHP面向对象程序设计之多态性的应用示例


Posted in PHP onDecember 19, 2018

本文实例讲述了PHP面向对象程序设计之多态性的应用。分享给大家供大家参考,具体如下:

多态是面向对象的三大特性中除封装和继承之外的另一重要特性。它展现了动态绑定的功能,也称为“同名异式”。多态的功能可让软件在开发和维护时,达到充分的延伸性。事实上,多态最直接的定义是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同反应效果。所谓多态性就是指一段程序能够处理多种类型对象的能力,在PHP中,多态值指的就是方法的重写。方法重写是指一个子类中可以重新修改父类中的某些方法,使其具有自己的特征。重写要求子类的方法和父类的方法名称相同,这可以通过声明抽象类或是接口来规范。

我们通过计算机USB设备的应用来介绍一下面向对象中的多态性,目前USB设置的种类仅我们自己用过的我想就有十几种吧。例如USB鼠标、USB键盘、USB存储设备等,这些计算机的外部设备都是通过USB接口连接到计算机以后,被计算机调用并启动运行的。也就是计算机正常运行的同时,没插入一种不同USB设备,就为计算机扩展一样功能,这正是我们所说的多态特征。那么为什么每个USB设备不一样,但都可以被计算机应用呢?那是因为每个USB设置都要遵守电脑USB接口的开发规范,都具有相同的能被计算机加载到并启用的方法,但运行各自相应的功能。这也正是我们对多态的定义,假设我们有一个主程序已经开发完成,需要后期由其他开发人员为其扩展一些功能,但需要在不改动主程序的基础上就可以加载到这些扩展的功能模块,其实也就是为程序开发一些插件。这就需要在主程序中需要为扩展的插件程序写好接口规范,然后每个插件只有按照规范去实现自己的功能,才能被主程序应用到。在计算机中应用USB设备的程序设计如下所示:

<?php
//定义一个iUSB接口,让每个USB设备都遵守这个规范
interface iUSB{
function run();
}
class Computer{
//计算机类中的一个方法可以应用任何一种USB设备
function useUSB($usb){
$usb->run();
}
}
?>

下面的代码根据USB接口定义的规范,实现了USB键盘、USB鼠标和USB存储三个设备,当然可以去实现更多的USB设置,都按照自己设备的功能重写了run()方法,所以插入计算机启动运行后每个USB设备都有自己的形态。代码如下所示:

<?php
//扩展一个USB键盘设备,实现usb接口
class Ukey implements iUSB {
function run(){
echo "运行USB键盘设备<br>";
}
}
//扩展一个USB鼠标设备,实现usb接口
class Umouse implements iUSB {
function run(){
echo "运行USB鼠标设备<br>";
}
}
//扩展一个USB存储设备,实现usb接口
class Ustore implements iUSB {
function run(){
echo "运行USB存储设备<br>";
}
}
$computer =new Computer;
$computer ->useUSB(new Ukey()); //为计算机插入一个usb键盘设备,并运行
$computer ->useUSB(new Umouse()); //为计算机插入一个usb鼠标设备,并运行
$computer ->useUSB(new Ustore()); //为计算机插入一个usb存储设备,并运行
?>

运行输出:

运行USB键盘设备
运行USB鼠标设备
运行USB存储设备

PS:代码较原文有所修改,已调试运行无误~

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

PHP 相关文章推荐
用PHP编程语言开发动态WAP页面
Oct 09 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
php简单中奖算法(实例)
Aug 15 PHP
详解将数据从Laravel传送到vue的四种方式
Oct 16 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 PHP
PHP自定义错误处理的方法分析
Dec 19 #PHP
PHP异常类及异常处理操作实例详解
Dec 19 #PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 #PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 #PHP
PHP获取星期几的常用方法小结
Dec 18 #PHP
php往mysql中批量插入数据实例教程
Dec 12 #PHP
yii2 url重写并隐藏index.php方法
Dec 10 #PHP
You might like
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
javascript天然的迭代器
2010/10/29 Javascript
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
javascript this详细介绍
2016/09/19 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
Python中使用logging模块打印log日志详解
2015/04/05 Python
python开发之str.format()用法实例分析
2016/02/22 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python将list转为matrix的方法
2018/12/12 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
Python 如何在字符串中插入变量
2020/08/01 Python
python 星号(*)的多种用途
2020/09/21 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
Python的两道面试题
2013/06/29 面试题
幼儿园小班家长评语
2014/12/30 职场文书
入伍通知书
2015/04/23 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL