实例讲解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+MYSQL的文章管理系统(二)
Oct 09 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
php pdo操作数据库示例
Mar 10 PHP
ThinkPHP实现分页功能
Apr 28 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
浅谈Laravel核心解读之Console内核
Dec 02 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 header示例代码(推荐)
2010/09/08 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
基于vue2.0动态组件及render详解
2018/03/17 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
简单介绍python封装的基本知识
2019/08/10 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python如何输出警告信息
2020/07/30 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
关于赌博的检讨书
2014/01/24 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python