举例讲解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 相关文章推荐
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
php数组转成json格式的方法
Mar 09 PHP
纯php生成随机密码
Oct 30 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
php中bind_param()函数用法分析
Mar 28 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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
新闻分类录入、显示系统
2006/10/09 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
关于python写入文件自动换行的问题
2018/06/23 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
python实现邮件自动发送
2019/08/10 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
幼师自荐信范文
2013/10/06 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
低碳环保标语
2014/06/12 职场文书
可可西里观后感
2015/06/08 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书