深入分析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新手上路(四)
Oct 09 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
如何用PHP实现插入排序?
Apr 10 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
PHP中类的自动加载的方法
Mar 17 PHP
thinkphp 获取控制器及控制器方法
Apr 16 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
Yii框架中memcache用法实例
2014/12/03 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
基于游标的分页接口实现代码示例
2018/11/12 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
Python快速从注释生成文档的方法
2016/12/26 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
美国批发供应商:Kole Imports
2019/04/10 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
作风建设年活动总结
2014/08/27 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL