实例讲解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下通过POST还是GET来传值
Jun 05 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
php笔记之:文章中图片处理的使用
Apr 26 PHP
php读取excel文件的简单实例
Aug 26 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
php实现中文转数字
Feb 18 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
Yii2语言国际化的配置教程
Aug 19 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
PHP array_push 数组函数
2009/12/26 PHP
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
js 走马灯简单实例
2013/11/21 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
Python实现的tcp端口检测操作示例
2018/07/24 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
公司年会抽奖活动主持词
2014/03/31 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
家长对学生的评语
2014/04/18 职场文书
活动总结新闻稿
2014/08/30 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
入党培养人考察意见
2015/06/08 职场文书
天堂的孩子观后感
2015/06/11 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL
Win2008系统搭建DHCP服务器
2022/06/25 Servers