深入分析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简单图像创建入门实例
Jun 10 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP中rename()函数的妙用讲解
Feb 28 PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 PHP
php输出文字乱码的解决方法
Oct 04 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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下将XML转换为数组
2010/01/01 PHP
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
Python图像灰度变换及图像数组操作
2016/01/27 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
招商专员岗位职责
2014/02/08 职场文书
工作求职信
2014/07/04 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
孔子观后感
2015/06/08 职场文书
python_tkinter事件类型详情
2022/03/20 Python
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记