实例讲解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 相关文章推荐
MySQL授权问题总结
May 06 PHP
PHP自定义函数收代码
Aug 01 PHP
php URL验证正则表达式
Jul 19 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
调整PHP的性能
Oct 30 PHP
PHP中nowdoc和heredoc使用需要注意的一点
Mar 21 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
php双层循环(九九乘法表)
Oct 23 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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中使用反射技术的架构插件使用说明
2010/05/18 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP反射学习入门示例
2019/06/14 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python模块smtplib学习
2018/05/22 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
单位提档介绍信
2014/01/17 职场文书
手机被没收检讨书
2014/02/22 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
本科毕业生自荐信
2014/05/26 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
化工生产实习心得体会
2016/01/22 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS