PHP多态代码实例


Posted in PHP onJune 26, 2015

多态定义:只关心一个接口或者基类,而不关心一个对象的具体类。(同一类型,不同结果)

这里两个例子:

第一个,我们发现,基类定义了标准,子类进行了自我规则的实现。这是多态的一个要求。同时,这是满足重写;实际上这是不同类的不同表现;没有严格满足一个接口,或者基类编程。因为你调用的时候不是 stu->showGrade() 而是各自自己的方法;

class stu{

  public function showGrade(){
    echo "base class";  
  }

}


class xiaomin extends stu{

  public function showGrade(){
    echo "is son show 80";  
  } 
}

class xiaoli extends stu{

  public function showGrade(){
    echo "is son show 60";  
  } 
}

function doit($obj){

  if(get_class($obj) != "stu"){
    $obj->showGrade();
  }

}

doit(new xiaoli());
doit(new xiaomin());

第二个例子:dovoice 参数规定了$obj 为animal,意识就是用接口 接受了 实现类对象。了向上转型。这就符合同一类型,不同结果了,这就是多态;

实际上在Java中 会是 animal a = new dog();这样子的;因为PHP 是若类型语言。没有对象转型机制。

interface animal{
  public function voice();
}

class cat implements animal{
  public function voice(){
    echo "miao~~~<br>";
  }
}

class dog implements animal{
  public function voice(){
    echo "wang ~~~<br>";
  }
}

function dovoice(animal $obj){
  $obj->voice();
}


dovoice(new dog());
dovoice(new cat());
PHP 相关文章推荐
PHP form 表单传参明细研究
Jul 17 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
PHP类相关知识点实例总结
Sep 28 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 PHP
PHP微信开发之二维码生成类
Jun 26 #PHP
Thinkphp关闭缓存的方法
Jun 26 #PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 #PHP
php header函数的常用http头设置
Jun 25 #PHP
PHP里的单例类写法实例
Jun 25 #PHP
PHP合并数组+号和array_merge的区别
Jun 25 #PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 #PHP
You might like
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
对new functionName()定义一个函数的理解
2014/05/22 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
原生JS实现天气预报
2020/06/16 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
大专自我鉴定范文
2013/10/01 职场文书
专升本自我鉴定
2013/10/10 职场文书
平民服装店创业计划书
2014/01/17 职场文书
公司新年寄语
2014/04/04 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
空气环保标语
2014/06/12 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
个人总结与自我评价
2015/02/14 职场文书
社区党员干部承诺书
2015/05/04 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
投诉书格式范本
2015/07/02 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫