深入分析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 相关文章推荐
风格模板初级不完全修改教程
Oct 09 PHP
PHP语法速查表
Dec 06 PHP
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
PHP 魔术函数使用说明
May 14 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
php实现下载限制速度示例分享
Feb 13 PHP
php+mysql大量用户登录解决方案分析
Dec 29 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
javascript动态加载三
2012/08/22 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
python版大富翁源代码分享
2018/11/19 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
python路径的写法及目录的获取方式
2019/12/26 Python
python中Mako库实例用法
2020/12/31 Python
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
单位租房协议书范本
2014/12/04 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
违纪开除通知书
2015/04/25 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript