举例讲解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中如何判断AJAX提交的数据
Feb 05 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
thinkphp模板继承实例简述
Nov 26 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
Nov 03 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
Feb 17 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 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
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
php支付宝APP支付功能
2020/07/29 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
迟到检讨书500字
2014/02/05 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
银行授权委托书样本
2014/10/13 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书