php面向对象之多态
2012-03-11 13:48
302 查看
多态是面向对三个重要特性之一,但是有时跟一些php开发的朋友聊天,发现很多php程序员对多态都存在误解,有不少人以为多态就是根据传入参数的类型和个数不同,执行不同的函数,而其实,这个观点是错误的。
那么我们先引用百度百科对多态的描述吧。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
从这个定义中,我们可以理解,多态其实引入的是整个类,如果用工厂来比喻,多态引入的是整条生产线,实现的是工厂模式的工作模式。而根据传入参数的类型和个数不同,执行不同的函数,这种工作模式其实可以说是映射,而不是多态,它实现的是根据传入的参数类型和个数不同,映射到对应的不同函数中执行不同的代码,这也不是工厂模式。
好吧,说了这么多理论,给一个案例给大家,一下子就知道什么是多态了。
那么我们先引用百度百科对多态的描述吧。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
从这个定义中,我们可以理解,多态其实引入的是整个类,如果用工厂来比喻,多态引入的是整条生产线,实现的是工厂模式的工作模式。而根据传入参数的类型和个数不同,执行不同的函数,这种工作模式其实可以说是映射,而不是多态,它实现的是根据传入的参数类型和个数不同,映射到对应的不同函数中执行不同的代码,这也不是工厂模式。
好吧,说了这么多理论,给一个案例给大家,一下子就知道什么是多态了。
<?php /** * 数据库基类 */ interface SqlDri { public function connect(); } /** * mysql子类 */ class MysqlObj implements SqlDri { public function connect() { print "mysql connect success!"; } } /** * mssql子类 */ class MssqlObj implements SqlDri { public function connect() { print "mssql connect success!"; } } /** * 多态入口 */ class SqlEnt { public function connect(SqlDri $SqlDri) { $SqlDri->connect(); } } $SqlEnt = new SqlEnt(); $SqlEnt->connect(new MysqlObj()); //$SqlEnt->connect(new MssqlObj()); ?>
相关文章推荐
- php面向对象之多态
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --类的继承,多态及抽象类
- php 面向对象的三大要素(封装、继承、多态)以及重写(override)和重载(overload)的举例说明
- PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- php面向对象之多态(1)
- PHP面向对象之解说(封装,继承,多态,引用,【const,define】)
- php面向对象 之 多态--重写覆盖
- PHP面向对象的三大特征: 继承,封装,多态
- PHP面向对象:PHP中的多态
- php 面向对象的三大特征 (封装,继承,多态)
- PHP面向对象:PHP中的多态
- 实例讲解PHP面向对象之多态
- 实例讲解PHP面向对象之多态
- php面向对象之多态
- PHP面向对象的三大特征: 继承,封装,多态
- php面向对象的三大特征 封装,继承,多态
- PHP面向对象三大特性之多态基础
- 学习PHP面向对象(七) 多态
- php面向对象 自动加载类 对象串行化 多态的应用