深入分析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 07 PHP
非常精妙的PHP递归调用与静态变量使用
Dec 16 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
php自定义的格式化时间示例代码
Dec 05 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
thinkPHP简单遍历数组方法分析
May 16 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
laravel admin实现分类树/模型树的示例代码
Jun 10 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/10/09 PHP
php Undefined index和Undefined variable的解决方法
2008/03/27 PHP
PHP内核探索:变量概述
2014/01/30 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
jQuery select操作控制方法小结
2010/05/26 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
python类参数self使用示例
2014/02/17 Python
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
Python模拟百度登录实例详解
2016/01/20 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
对python中dict和json的区别详解
2018/12/18 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
Solaris操作系统的线程机制
2015/07/28 面试题
酒店总经理工作职责
2013/12/13 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
协议书怎么写
2014/04/21 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript