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 如何向 MySQL 发送数据
Oct 09 PHP
php知道与问问的采集插件代码
Oct 12 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
php+html5+ajax实现上传图片的方法
May 14 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
详解PHP队列的实现
Mar 14 PHP
详解php命令注入攻击
Apr 06 PHP
php中用unset销毁变量并释放内存
May 10 PHP
PHP7 新增功能
Mar 09 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
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php mssql 数据库分页SQL语句
2008/12/16 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
2017/02/19 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
linux比较文件内容的命令是什么
2013/03/04 面试题
2015年五一劳动节活动总结
2015/02/09 职场文书
中班上学期个人总结
2015/02/12 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
详解Flask开发技巧之异常处理
2021/06/15 Python
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
JS函数式编程实现XDM一
2022/06/16 Javascript