深入分析php中接口与抽象类的区别


Posted in PHP onJune 08, 2013

接口和抽象类真的很难区分开,引文他们很相似,方法都没有定义逻辑,都是供子类是想或继承的。区分二者只要记住一句话:接口是规范,类是实现。接口的目的是定义一个规范,大家都遵守这个规范。

也就是说,从目的上可以很清楚地区分接口和抽象类。那么还是有疑问,既然有了借口,那么为什么还必须有抽象类呢?

加入我们要定义一个名为Animal的类,该类有两个子集Dog和Cattle,二者都有两个方法:run()方法和speak()方法。

假定Dog和Cattle的“跑(run)”是相同的,因此run()方法具有相同的业务逻辑;而“叫(speak)”是不同的,因此speak()方法的业务逻辑不同。而且,有一个IAnimal的接口规定必须有这两个方法,这意味着Animal类必须实现这两个方法,同样,Dog和Cattle这两个子类也必须有这两个方法吗,那么我们可以这样定义:

<?php
interface IAnimal{
 public function run();
 public function speak();
}
class Animal implements IAnimal{
 public function run(){
  //在这里可以添加一些相同的run逻辑
  return "same run<br />";
 }
 public function speak(){
  //这里可以添加一些相同的speak逻辑
  return "same speak<br />";
 }
}
class Dog extends Animal{
 public function speak(){
  //在这里可以添加一些Dog逻辑
  return "Dog speak<br />";
 }
}
class Cattle extends Animal{
 public function speak(){
  //在这里可以添加一些Cattle逻辑
  return "Cattle speak<br />";
 }
}
$oDog=new Dog();
echo($oDog->run());
echo($oDog->speak());
$oCattle=new Cattle();
echo($oCattle->run());
echo($oCattle->speak());
?>

PHP 相关文章推荐
PHP 类商品秒杀计时实现代码
May 05 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
PHP Session机制简介及用法
Aug 19 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
PHP实现唤起微信支付功能
Feb 18 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 #PHP
深入php self与$this的详解
Jun 08 #PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 #PHP
解析dedeCMS验证码的实现代码
Jun 07 #PHP
探讨php中header的用法详解
Jun 07 #PHP
php简单浏览目录内容的实现代码
Jun 07 #PHP
php之XML转数组函数的详解
Jun 07 #PHP
You might like
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
javascript定义函数的方法
2010/12/06 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
python如何写个俄罗斯方块
2020/11/06 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
2013年研究生毕业感言
2014/02/06 职场文书
物流业务员岗位职责
2014/02/08 职场文书
销售经理竞聘书
2014/03/31 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
邀请函样本
2015/02/02 职场文书
何玥事迹观后感
2015/06/16 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis