PHP abstract与interface之间的区别


Posted in Javascript onNovember 11, 2013

1.php 接口类:interface

其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 :

 interface Shop
 {
       public function buy($gid);
       public function sell($gid);
       public function view($gid);
 }

我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都 不行,如果子类没有实现这些话,就无法运行。实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不 行,但是具体你怎么去做,我不管,那是你的事,如:
class BaseShop implements Shop
{
public function buy($gid)
{
echo('你购买了ID为 :'.$gid.'的商品');
}
public function sell($gid)
{
echo('你卖了ID为 :'.$gid.'的商品');
}
public function view($gid)
{
echo('你查看了ID为 :'.$gid.'的商品');
}
}

你想想,在一个多人合作的大项目里面,有了接口类是多么的方便,这样你就不用去问别人,你的某某功能的方法名是什么了,当然如果你们喜欢这样我也没有办法。

结论 : 接口类就是一个类的领导者,指明方向,子类必须完成它指定方法。

2.php 抽象类 : abstract

其实抽象类和接口类有一部分很像,记得在哪里看见这样一句话,抽象类就把类像的部分抽出来,这句看上去很搞笑,其实它说出了抽象类的真理,抽象类的 作用是,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了,你可能会说“我不是可以重写一个类每个公共类我个实例化一个这 个公共类,调用相同的方法就可以了”,这里是可以,实际上抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤,让你就像直接调用本类方法一样方 便,而且你还可以重载这个方法。如:

  abstract class BaseShop
  {
      public function buy($gid)
      {
          echo('你购买了ID为 :'.$gid.'的商品');
      }
      public function sell($gid)
      {
          echo('你卖了ID为 :'.$gid.'的商品');
     }
     public function view($gid)
     {
         echo('你查看了ID为 :'.$gid.'的商品');
     }
 }
 class BallShop extends BaseShop
 {
     var $itme_id = null;
     public function __construct()
     {
         $this->itme_id = 2314;
     }
     public function open()
     {
         $this->sell($this->itme_id);
     }
 }

这里是一个例子,想上面一样我定义了一个商店类,抽出了它所有像的部分,买(buy),卖(sell),看(view),并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。

结论: 抽象类就是一个类的服务提供商,拥有众多服务,你不用必须用,当需要的时候你来用就可以,如果你觉得不提供服务不满意,你还可以自己来做。而abstract function 方法和interface有些相似,就是父类中生声明的方法,子类中必须实现,但是没有用abstract声明的方法将成为子类的公共方法,没有必要在子类中必须实现

Javascript 相关文章推荐
对textarea框的代码调试,而且功能上使用非常方便,酷
Jun 30 Javascript
js日期相关函数总结分享
Oct 15 Javascript
JQuery的ready函数与JS的onload的区别详解
Nov 21 Javascript
基于Bootstrap3表格插件和分页插件实例详解
May 17 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
[js高手之路]寄生组合式继承的优势详解
Aug 28 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
Sep 10 jQuery
AngularJS修改model值时,显示内容不变的实例
Sep 13 Javascript
基于vue.js组件实现分页效果
Dec 29 Javascript
详解jQuery如何实现模糊搜索
May 10 jQuery
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
JavaScript 实现轮播图特效的示例
Nov 05 Javascript
js 一个关于图片onload加载的事
Nov 10 #Javascript
javascript陷阱 一不小心你就中招了(字符运算)
Nov 10 #Javascript
全面理解面向对象的 JavaScript(来自ibm)
Nov 10 #Javascript
面向对象设计模式的核心法则
Nov 10 #Javascript
JavaScript 语言基础知识点总结(思维导图)
Nov 10 #Javascript
JS增加行复制行删除行的实现代码
Nov 09 #Javascript
javascript相等运算符与等同运算符详细介绍
Nov 09 #Javascript
You might like
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
js创建数组的简单方法
2016/07/27 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
python制作websocket服务器实例分享
2016/11/20 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
家长对学生的评语
2014/04/18 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
运动会演讲稿50字
2014/08/25 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
个人借款协议书范本
2014/11/17 职场文书
信用卡工资证明范本
2015/06/19 职场文书
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android