举例讲解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 相关文章推荐
树型结构列出指定目录里所有文件的PHP类
Oct 09 PHP
php获取根域名方法汇总
Oct 28 PHP
php将access数据库转换到mysql数据库的方法
Dec 24 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
php实现的mongodb操作类实例
Apr 03 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 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&amp;java(一)
2006/10/09 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
常用的 JS 排序算法 整理版
2018/04/05 Javascript
浅谈js闭包理解
2019/03/28 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
python实现中文转换url编码的方法
2016/06/14 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
基于Python函数和变量名解析
2019/07/19 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
Python定义函数实现累计求和操作
2020/05/03 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
Python collections模块的使用方法
2020/10/09 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
高校毕业生登记表自我鉴定
2013/11/03 职场文书
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
实习心得体会
2014/01/02 职场文书
会计出纳岗位职责
2015/03/31 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
小学英语教学反思范文
2016/02/15 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS