实例讲解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 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
PHP查询快递信息的方法
Mar 07 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 PHP
Yii框架连表查询操作示例
Sep 06 PHP
详解no input file specified 三种解决方法
Nov 29 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
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
Vue简单实现原理详解
2020/05/07 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
平面设计师的工作职责
2013/11/21 职场文书
车祸赔偿收入证明
2014/01/09 职场文书
大学毕业感言一句话
2014/02/06 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
教室布置标语
2014/06/26 职场文书
工商管理本科生求职信
2014/07/13 职场文书
党支部书记岗位职责
2015/02/15 职场文书
初中毕业感言300字
2015/07/31 职场文书
环保主题班会教案
2015/08/13 职场文书
关于保护环境的建议书
2019/06/24 职场文书
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python