php 接口类与抽象类的实际作用


Posted in PHP onNovember 26, 2009

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),并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。
结论: 抽象类就是一个类的服务提供商,拥有众多服务,你不用必须用,当需要的时候你来用就可以,如果你觉得不提供服务不满意,你还可以自己来做。
呵呵,以上就是我对php 接口类,抽象类一些拙见,希望能对搞不清这两个朋友一些帮助,如果什么意见欢迎留言!
PHP 相关文章推荐
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
php操作mysqli(示例代码)
Oct 28 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
zend framework中使用memcache的方法
Mar 04 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
在mysql数据库原有字段后增加新内容
Nov 26 #PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 #PHP
php 运行效率总结(提示程序速度)
Nov 26 #PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 #PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 #PHP
php Memcache 中实现消息队列
Nov 24 #PHP
phplock(php进程锁) v1.0 beta1
Nov 24 #PHP
You might like
php使用异或实现的加密解密实例
2013/09/04 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
python发送arp欺骗攻击代码分析
2014/01/16 Python
通过C++学习Python
2015/01/20 Python
解决python报错MemoryError的问题
2018/06/26 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python变量的存储原理详解
2019/07/10 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
this关键字的含义
2015/04/08 面试题
《赵州桥》教学反思
2014/02/17 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
Pandas数据类型之category的用法
2021/06/28 Python