实例讲解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配置文件中最常用四个ini函数
Mar 19 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
PHP入门之常量简介和系统常量
May 12 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
codeigniter实现get分页的方法
Jul 10 PHP
关于Yii中模型场景的一些简单介绍
Sep 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Django返回json数据用法示例
2016/09/18 Python
python+opencv识别图片中的圆形
2020/03/25 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
python 提取文件指定列的方法示例
2019/08/07 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
售后服务承诺书
2014/03/26 职场文书
李开复演讲稿
2014/05/24 职场文书
演讲比赛主持词
2015/06/29 职场文书
在人间读书笔记
2015/06/30 职场文书
老人节主持词
2015/07/04 职场文书
python的变量和简单数字类型详解
2021/09/15 Python