举例讲解PHP面对对象编程的多态


Posted in PHP onAugust 12, 2015

什么是多态?
多态性,其来自于dictionary.com的定义是"以不同形式,阶段或者类型出现在独立的组织中或者同种组织中,而不存在根本区别。"由该定义,我们可以认为,多态性是一种通过多种状态或阶段来描述相同对象的编程方式。其实,它的真正意义在于:实际开发中,我们只需要关注一个接口或基类的编程,而不必担心一个对象所属于的具体类(class)。
如果你熟悉设计模式,即使只是有个初步了解,那么你也会了解这个概念。事实上,PHP5多态性可能是基于模式设计编程中的最伟大的工具。它允许我们以一种逻辑的方式来组织相类似的对象从而实现在具体编码时不必担心对象的具体类型;而且,我们只需要对一个所期望的接口或基类编程即可。一个应用程序越抽象,则它就显得越灵活--而多态性是对行为加以抽象的最好的方式之一。
例如,让我们考虑一个叫Person的类。我们可以用称为David,Charles和Alejandro的类来子类化Person。Person有一个抽象方法AcceptFeedback(),所有的子类都要实现这个方法。这意味着,任何使用基类Person的子类的代码都能调用方法AcceptFeedback()。你不必检查该对象是一个David还是一个Alejandro,仅知道它是一个Person就够了。结果是,你的代码只需关注"最小公分母"-Person类即可。
在这个示例中的Person类也可以被创建为一个接口。当然,与上面相比存在一些区别,主要在于:一个接口并没有给出任何行为,而仅确定了一组规则。一个Person接口要求的是"你必须支持AddFeedback()方法",而一个Person类可以提供一些AddFeedback()方法的缺省代码-你对之的理解可以是"如果你不选择支持AddFeedback(),那么你应该提供一种缺省实现。"至于如何选择接口或基类则并非本文的主题;但是,一般说来,你需要通过基类来实现一个缺省的方法。如果你能够简单地勾勒出你的类所要实现的一组期望的功能,那么你也可以使用一个接口。

通俗理解
多态最直接的定义就是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同的反应结果

多态的代码

   

<?php 
   
  /** 
   * 声明接口Demo 
   * @author wzy 
   * 
   */ 
  interface Demo 
  { 
   
    const NAME = "wangzhengyi"; 
   
    const AGE = 25; 
   
    function fun1 (); // 声明方法默认是public abstract 
    function fun2 (); 
  } 
   
  class One implements Demo 
  { 
   
    public function fun1 () 
    { 
      echo Demo::NAME . "就读于中国传媒大学"; 
    } 
   
    public function fun2 () 
    { 
      echo Demo::NAME . "的年龄是" . Demo::AGE; 
    } 
  } 
   
  class Two implements Demo 
  { 
   
    public function fun1 () 
    { 
      echo Demo::NAME . "在北京灵创众和科技有限公司实习中"; 
    } 
   
    public function fun2 () 
    { 
      echo Demo::NAME . "去年的年龄是24"; 
    } 
  } 
   
  // 同一个接口,实现同一个方法,不同的对象,反应结果不同。这就是多态的表现和应用 
   
  $one = new One(); 
  $one->fun1(); // wangzhengyi就读于中国传媒大学 
  $one->fun2(); // wangzhengyi的年龄是25 
   
  echo "<br>"; 
   
  $two = new Two(); 
  $two->fun1(); // wangzhengyi在北京灵创众和科技有限公司实习中 
  $two->fun2(); // wangzhengyi去年的年龄是24
PHP 相关文章推荐
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP加速 eAccelerator配置和使用指南
Jun 05 PHP
PHP 一个随机字符串生成代码
May 26 PHP
smarty 缓存控制前的页面静态化原理
Mar 15 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
PHP二维数组去重实例分析
Nov 18 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
php新建文件的方法实例
Sep 26 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
详解PHP中的状态模式编程
Aug 11 #PHP
简单介绍PHP的责任链编程模式
Aug 11 #PHP
PHP会话处理的10个函数
Aug 11 #PHP
PHP的Socket网络编程入门指引
Aug 11 #PHP
php实现的农历算法实例
Aug 11 #PHP
PHP发送短信代码分享
Aug 11 #PHP
php实现可逆加密的方法
Aug 11 #PHP
You might like
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python运用于数据分析的简单教程
2015/03/27 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python全栈开发语法总结
2020/11/22 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
结婚典礼证婚词
2014/01/11 职场文书
毕业生找工作求职信
2014/08/05 职场文书
融资合作协议书范本
2014/10/17 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
个人先进材料范文
2014/12/30 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
比赛主持人开场白
2015/05/29 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
Java对文件的读写操作方法
2022/04/29 Java/Android