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 相关文章推荐
密码强度检测效果实现原理与代码
Jan 04 Javascript
一个封装js代码-----展开收起效果示例
Jul 03 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
js中call与apply的用法小结
Dec 28 Javascript
jsp网页搜索结果中实现选中一行使其高亮
Feb 17 Javascript
jquery制作多功能轮播图插件
Apr 02 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
基于Vue实现后台系统权限控制的示例代码
Aug 29 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 Javascript
webpack4 optimization使用总结
Nov 10 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 Javascript
Three.js实现雪糕地球的使用示例详解
Jul 07 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
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
Python实现抓取网页并且解析的实例
2014/09/20 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
分公司经理岗位职责
2013/11/11 职场文书
大学校园活动策划书
2014/02/04 职场文书
火车的故事教学反思
2014/02/11 职场文书
大学老师推荐信
2014/02/25 职场文书
法人授权委托书
2014/04/03 职场文书
文明生主要事迹
2014/05/25 职场文书
党员剖析材料范文
2014/12/18 职场文书
小学英语复习计划
2015/01/19 职场文书
离婚起诉书范本
2015/05/18 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
golang特有程序结构入门教程
2021/06/02 Python