实例讲解PHP面向对象之多态


Posted in PHP onAugust 20, 2014

什么是多态性?

多态性是继数据库抽象和继承后,面向对象语言的第三个特征。多态即多种形态,具有表现多种形态的能力特征。在面向对象中表示根据对象的类型以不同方式处理。多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。

如我们创建一个doing()方法,如果是学生则打印上课,如是公司职员则打印上班。

普通做法

使用if判断

/**

 * PHP多态性

 * 琼台博客

 */

 

// 定义学生类

class student{

    public function cla(){

            echo "学生工正在上课!<br />";

    }

}

 

// 定义职员类

class office{                              

        public function Wor(){

            echo "职员正在上班!<br />";

        }

}

 

// 判断对象类型方法

function doing($obj){ 

        if($obj instanceof student){ 

            $obj->cla();

        }elseif($obj instanceof office){

            $obj->wor();

        }else{

            echo "没有这个对象!";

        }

}

 

doing(new student()); // 学生正在上课

doing(new office());  // 职员正在上班

以上结果输出:

学生正在上课
职员正在上班

这种普通方法有个缺点,就是对象如果很多,那么if..else..很长,不灵活。
 
多态性做法

定义一个公共抽象方法,所有子类继承它。

/**

 * PHP多态性

 * 琼台博客

 */

 

// 定义一个公共类

class pub{

    protected function working(){

        echo "本方法需要在子类中重载!";

    }

}

 

// 定义学生类,继承公共类pub

class student extends pub{

    public function working(){

        echo "学生工正在上课!<br />";

    }

}

 

// 定义职员类,继承公共类pub

class office extends pub{

        public function working(){

        echo "职员正在上班!<br />";

        }

}

 

// 判断对象类型方法

function doing($obj){ 

        if($obj instanceof pub){ 

            $obj->working();

        }else{

            echo "没有这个对象!";

        }

}

 

doing(new student()); // 学生正在上课

doing(new office());  // 职员正在上班

这就是多态的特性,灵活重用。
 
其它做法

从多态性的实现方式来看,无非就规范了每个类都要重载父类的一个方法,从而达到统一效果。而我们在定义类的时候,自行加上统一的方法也可行。因此以上例子也可以这么实现:

/**

 * PHP多态性

 * 琼台博客

 */

 

// 定义学生类

class student{

    // 定义统一的方法pub

    public function pub(){

        echo "学生工正在上课!<br />";

    }

}

 

// 定义职员类

class office{

    // 定义统一的方法pub

        public function pub(){

        echo "职员正在上班!<br />";

        }

}

 

// 判断对象类型方法

function doing($obj){ 

    if($obj){

        // 调用类的统一方法

            $obj->pub();

    }else{

        echo '没有这个对象';  

    }

}

 

doing(new student()); // 学生正在上课

doing(new office());  // 职员正在上班

当然,以上的例子不能说明多态性就能使用这样的方式搞定,毕竟多态性在复杂的程序设计中,它能有效的达到灵活重用的特性。

多态性也可以理解为一种程序设计方式,而程序设计最终目的无非就是:灵活,多态,重用,高效。

PHP 相关文章推荐
谈谈PHP语法(2)
Oct 09 PHP
Ajax+PHP边学边练 之五 图片处理
Dec 03 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
php调用C代码的实现方法
Mar 11 PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
PHP安全下载文件的方法
Apr 07 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 #PHP
Linux下PHP连接Oracle数据库
Aug 20 #PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 #PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 #PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 #PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 #PHP
Smarty变量调节器失效的解决办法
Aug 20 #PHP
You might like
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Tornado 多进程实现分析详解
2018/01/12 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python实现静态web服务器
2019/09/03 Python
flask框架中的cookie和session使用
2021/01/31 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
平面设计自荐信
2013/10/07 职场文书
上班看电影检讨书
2014/02/12 职场文书
2014企业年终工作总结
2014/12/23 职场文书
二年级学生期末评语
2014/12/26 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android