多态是面向对三个重要特性之一,但是有时跟一些php开发的朋友聊天,发现很多php程序员对多态都存在误解,有不少人以为多态就是根据传入参数的类型和个数不同,执行不同的函数,而其实,这个观点是错误的。

那么我们先引用百度百科对多态的描述吧。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
从这个定义中,我们可以理解,多态其实引入的是整个类,如果用工厂来比喻,多态引入的是整条生产线,实现的是工厂模式的工作模式。而根据传入参数的类型和个数不同,执行不同的函数,这种工作模式其实可以说是映射,而不是多态,它实现的是根据传入的参数类型和个数不同,映射到对应的不同函数中执行不同的代码,这也不是工厂模式。
好吧,说了这么多理论,给一个案例给大家,一下子就知道什么是多态了。
 
  1. <?php
  2. /**
  3. * 数据库基类
  4. */
  5. interface SqlDri {
  6. public function connect();
  7. }
  8. /**
  9. * mysql子类
  10. */
  11. class MysqlObj implements SqlDri {
  12. public function connect() {
  13. print "mysql connect success!";
  14. }
  15. }
  16. /**
  17. * mssql子类
  18. */
  19. class MssqlObj implements SqlDri {
  20. public function connect() {
  21. print "mssql connect success!";
  22. }
  23. }
  24. /**
  25. * 多态入口
  26. */
  27. class SqlEnt {
  28. public function connect(SqlDri $SqlDri) {
  29. $SqlDri->connect();
  30. }
  31. }
  32. $SqlEnt = new SqlEnt();
  33. $SqlEnt->connect(new MysqlObj());
  34. //$SqlEnt->connect(new MssqlObj());
  35. ?>

1.什么是多态

多态(Polymorphism)按字面上意思理解就是“多种形状”。可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。在面向对象的理论中,多态性的一般定义为:同一个操作作用于不同的类的实例,将产生不同的执行结果。也即不同类的对象收到相同的消息时,将得到不同的结果。

在实际的应用开发中,采用面向对象中的多态主要在于可以将不同的子类对象都当作一个父类来处理,并且可以屏蔽不同子类对象之间所存在的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

2.  多态的应用设计

在实际的应用开发中,通常为了使项目能够在以后的时间里的轻松实现扩展与升级,需要通过继承实现可复用模块进行轻松升级。在进行可复用模块设计时,就需要尽可能的减少使用流程控制语句。此时就可以采用多态实现该类设计。

php面向对象之多态相关推荐

  1. 12 Java面向对象之多态

    JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...

  2. swift面向对象之多态与继承

    swift面向对象之多态与继承 1.多态 运行时多态 运行时多态的要点 1.要有继承关系的存在 2.子类要重写父类的方法 3.父类类型的引用指向子类实例 2.继承 1.继承的注意 继承可以用于类而不能 ...

  3. Golang笔记-面向对象编程-多态/类型断言

    面向对象编程-多态 基本介绍 变量(实例)具有多种形态.面向对象的第三大特征,在 Go 语言,多态特征是通过接口实现的.可 以按照统一的接口来调用不同的实现.这时接口变量就呈现不同的形态. 快速入门 ...

  4. Java 面向对象:多态的理解

    Java 面向对象:多态的理解 一.多态的定义 一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类) 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父 ...

  5. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  6. python中的多态用法_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  7. Python面向对象编程---多态

    Python面向对象编程-多态 定义: 是一种使用对象的方式,子类重写父类的方法(非必须),调用不同子类对象的相同父类方法,可以产生不同的执行结果,简言之就是:传入不同的对象,产生不同的结果. 好处: ...

  8. Java面向对象之多态(来源于身边的案例)

    2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...

  9. Java面向对象:多态——基于继承的向上转型、方法重写、动态绑定

    Java面向对象:多态 1.多态的概念 2.向上转型和向下转型 (1)向上转型 (2)向下转型 3.方法重写 4.动态绑定与静态绑定 5.多态的优缺点 ======================== ...

  10. Python学习 - 面向对象之多态

    Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855 Python学习 - 数据类型:https://blog ...

最新文章

  1. linux中设置程序开机自动启动
  2. IOS开发笔记9-C语言基础复习
  3. Leaflet实现地图分屏联动
  4. 农行笔试,直接寄了,经验总结
  5. HTML禁用Flash文件右键
  6. 非常详尽的 Shiro 架构解析
  7. 经典参考书:《编程之美——微软技术面试心得》
  8. 9月第1周文学类网站/频道:新浪文学超起点居首
  9. 用JavaScript替换重复字符
  10. java语言画图_Java语言实现画图工具
  11. python应用内部审计_软件机器人实现内部审计自动化变革,助力企业转型数字化审计...
  12. Gremlin 基础知识
  13. IPC-7351 LPWizard使用简要说明
  14. 【离散数学】数理逻辑 第一章 命题逻辑(7) 命题逻辑的推理理论
  15. Power Query 系列 (11) - 函数基础
  16. Direct3D中的光照
  17. esp8266驱动电机
  18. 一、Struts基本介绍和使用
  19. Android 百度地图开发问题----解决地图有时候加载不出来问题
  20. 2020北京考研英语一80+经验

热门文章

  1. linux - linux查看磁盘空间/查看文件分区(挂载点)/查看文件大小
  2. CISCO学习笔记(四)Trunk功能及端口模式
  3. HTTP 请求头中的 X-Forwarded-For,X-Real-IP(nginx)
  4. H5如何与原生App(ios,安卓,RN)通信?
  5. 苹果手机充值显示服务器异常,梦幻西游手游充值出现异常的iOS系统解析
  6. 树与图在索引上的区别
  7. jsplumb 系列(一)
  8. <span>的宽高到底是多少?
  9. egret白鹭引擎基础介绍
  10. 常见的Nginx 502 Bad Gateway解决办法