举例讲解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+mysql留言本源码
Nov 11 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
php cli换行示例
Apr 22 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
PHP面向对象详解(三)
Dec 07 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP封装的分页类与简单用法示例
Feb 25 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 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
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
Python科学画图代码分享
2017/11/29 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
Python自动创建Excel并获取内容
2020/09/16 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
高中三年学习生活的自我评价
2013/10/10 职场文书
副总经理工作职责
2013/11/28 职场文书
会计出纳岗位职责
2013/12/25 职场文书
新农村建设标语
2014/06/24 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
锦旗赠语
2015/06/23 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android