实例讲解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中的串行化变量和序列化对象
Sep 05 PHP
php面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
检测png图片是否完整的php代码
Sep 06 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
php 保留字列表
Oct 04 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
PHP单态模式简单用法示例
Nov 16 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
laravel框架创建授权策略实例分析
Nov 22 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应用JSON技巧讲解
2013/02/03 PHP
php获取文件大小的方法
2014/02/26 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
jquery异步循环获取功能实现代码
2010/09/19 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
浅谈python 线程池threadpool之实现
2017/11/17 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
品质主管岗位职责
2014/03/16 职场文书
培训讲师岗位职责
2014/04/13 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
科学育儿宣传标语
2014/10/08 职场文书
黄石寨导游词
2015/02/05 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python