深入分析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目录与文件操作
Dec 30 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
PHP运行模式的深入理解
Jun 03 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
thinkphp实现图片上传功能分享
Mar 04 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
Jul 04 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 PHP
php引用和拷贝的区别知识点总结
Sep 23 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 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的性能
2013/10/30 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
js实现点击生成随机div
2020/01/16 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Python中的作用域规则详解
2015/01/30 Python
python搜索指定目录的方法
2015/04/29 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python制作动态字符图的实例
2019/01/27 Python
详解python编译器和解释器的区别
2019/06/24 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
实习生个人找工作的自我评价
2013/10/30 职场文书
治超工作实施方案
2014/05/04 职场文书
大学生学习计划书
2014/09/15 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
结婚典礼主持词
2015/06/29 职场文书
Redis性能监控的实现
2021/07/09 Redis
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers