深入分析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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
打造计数器DIY三步曲(中)
Oct 09 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
Symfony2 session用法实例分析
Feb 04 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 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
神族 Protoss 历史背景
2020/03/14 星际争霸
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
Python中字符串的格式化方法小结
2016/05/03 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Python 在函数上添加包装器
2020/07/28 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
如何利用find命令查找文件
2016/11/18 面试题
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
副总经理工作职责
2013/11/28 职场文书
小学班主任培训方案
2014/06/04 职场文书
文艺委员竞选稿
2015/11/19 职场文书
导游词之太湖
2019/10/08 职场文书
Python操作CSV格式文件的方法大全
2021/07/15 Python