PHP面向对象多态性实现方法简单示例


Posted in PHP onSeptember 27, 2017

本文实例讲述了PHP面向对象多态实现方法。分享给大家供大家参考,具体如下:

多态:父类引用指向子类对象(面向对象中能够根据使用类的上下文(使用输入不同的类调用不同类的方法)来重新定义或改变类的性质和行为。);接口引用指向实现接口的类对象。

面向对象:把数据(属性),操作数据的方法,逻辑,形成一个类,把类抽象出来形成对象,通过对象使用类;

<?php
class work{
  function polymorphic($obj){
    //检查是否引用类型(obj是否继承animal类)
    if($obj instanceof animal){
      $obj -> fun();
    }
    else{
      echo "no function";
    }
  }
  //如果需要指定类 (指定cat类,包含cat子类)
  function bose(cat $obj){
    $obj->fun();
  }
}
//抽象类
 abstract class animal{
  abstract function fun();
}
//cat猫类
class cat extends animal{
  function fun(){
    echo "cat say miaomiao...";
  }
}
//dog狗类
class dog extends animal{
  function fun(){
    echo "dog say wangwang...";
  }
}
class mouse extends cat{
}
//先new一个work类
$new_work = new work();
//然后通过new_work对象 调用 polymorphic 方法,传入不同的类实现 父类引用指向子类对象;接口引用指向实现接口的类对象(多态)。
$new_work->polymorphic(new cat());
echo '<br/>';
$new_work->polymorphic(new dog());
echo '<br/>';
//指定类方式仿java
$new_work->bose(new cat());
echo '<br/>';
//如果传输其他类,或者未继承cat类则会报错
//$new_work->bose(new dog());
echo '<br />';
//这也不会报错
$new_work->bose(new mouse());

运行结果:

cat say miaomiao...
dog say wangwang...
cat say miaomiao...

cat say miaomiao...

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
PHP 多进程 解决难题
Jun 22 PHP
PHP 编写大型网站问题集
May 07 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 #PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 #PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 #PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 #PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 #PHP
php mysql PDO 查询操作的实例详解
Sep 23 #PHP
PHP实现权限管理功能示例
Sep 22 #PHP
You might like
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
Javascript继承机制详解
2017/05/30 Javascript
vue-router单页面路由
2017/06/17 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中的True,False条件判断实例分析
2015/01/12 Python
python字符串,数值计算
2016/10/05 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
Django 请求Request的具体使用方法
2019/11/11 Python
详解django中Template语言
2020/02/22 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
计算机应用职专应届生求职信
2013/11/12 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
小学班主任工作随笔
2015/08/15 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
anaconda python3.8安装后降级
2021/06/11 Python
Python中基础数据类型 set集合知识点总结
2021/08/02 Python