深入分析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 extract 将数组拆分成多个变量的函数
Jun 30 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
Jun 22 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
php中序列化与反序列化详解
Feb 13 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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自定义函数返回多个值
2006/11/26 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python队列queue模块详解
2018/04/27 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
python实现逻辑回归的示例
2020/10/09 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
客服部工作职责范本
2014/02/14 职场文书
企业年检委托书范本
2014/10/14 职场文书
周一给客户的问候语
2015/11/10 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
Flink 侧流输出源码示例解析
2022/09/23 Servers