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 相关文章推荐
投票管理程序
Oct 09 PHP
PHP页面间传递参数实例代码
Jun 05 PHP
php 信息采集程序代码
Mar 17 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
php读取本地文件常用函数(fopen与file_get_contents)
Sep 09 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
PHP制作图形验证码代码分享
Oct 23 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 PHP
laravel5表单唯一验证的实例代码
Sep 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
模仿OSO的论坛(五)
2006/10/09 PHP
php+mysql事务rollback&amp;commit示例
2010/02/08 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
php通过各种函数判断0和空
2020/07/04 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
外语系毕业生找工作的求职信
2013/11/28 职场文书
网站开发实习生的自我评价
2013/12/11 职场文书
学生请假条格式
2014/04/11 职场文书
舞蹈专业求职信
2014/06/13 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
会计工作检讨书
2015/02/19 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
新手入门Mysql--sql执行过程
2021/06/20 MySQL