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 相关文章推荐
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
php adodb连接不同数据库
Mar 19 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
PHP反射机制用法实例
Aug 28 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
joomla组件开发入门教程
May 04 PHP
linux下php上传文件注意事项
Jun 11 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 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
写一个用户在线显示的程序
2006/10/09 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
PHP基本语法实例总结
2016/09/09 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
js实现分页功能
2017/05/24 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
python多线程扫描端口示例
2014/01/16 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
局域网标准
2016/09/10 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
个人安全承诺书
2014/05/22 职场文书
运动会宣传口号
2014/06/09 职场文书
中学生运动会广播稿
2015/08/19 职场文书
班委竞选稿范文
2015/11/21 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js