举例讲解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自动更新新闻DIY
Oct 09 PHP
一个php作的文本留言本的例子(二)
Oct 09 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
php 文章调用类代码
Aug 11 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
php实现json编码的方法
Jul 30 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
浅谈PHP中的那些魔术常量
Dec 02 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数据库类
2009/05/27 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
python win32 简单操作方法
2017/05/25 Python
Python标准库sched模块使用指南
2017/07/06 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
django创建超级用户过程解析
2019/09/18 Python
Python实现把类当做字典来访问
2019/12/16 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
.NET是怎么支持多种语言的
2015/02/24 面试题
优秀的教师个人的中文求职信
2013/09/21 职场文书
迟到检讨书1000字
2014/01/15 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
统计员岗位职责
2015/02/11 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
飞屋环游记观后感
2015/06/08 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技