免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2675 | 回复: 1
上一主题 下一主题

PHP中接口的讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-30 11:25 |只看该作者 |倒序浏览
PHP中接口的讨论









文章转载自重庆PHP,原文地址:http://www.php-chongqing.com/index.php/article/107


很多人都问我,PHP的接口有什么用?什么时候用?什么地方用?
首先我们来看什么是接口?
接口不是类,和类相似。主要用来描述类具体有什么功能(方法),但并不实现具体的功能,只起定义作用,具体功能由实现接口的类实现(implement),一个类可以实现一个或多个接口。
一般的动态语言都没有接口,但是PHP5中有,在PHP中定义接口:

Java代码
  1. 1.interface User {   
  2. 2.    public function eat();   
  3. 3.    public function sleep();   
  4. 4.}  
  5. interface User {
  6.     public function eat();
  7.     public function sleep();
  8. }
复制代码
实现接口:

Java代码
  1. 1.class Chinese implements User {   
  2. 2.    public function eat() {   
  3. 3.    echo "eat chinese food!";   
  4. 4.    }   
  5. 5.    public function sleep() {   
  6. 6.    echo "sleep..."  
  7. 7.    }   
  8. 8.}  
  9. class Chinese implements User {
  10.     public function eat() {
  11.         echo "eat chinese food!";
  12.     }
  13.     public function sleep() {
  14.         echo "sleep..."
  15.     }
  16. }
复制代码
上面的代码在PHP编程中到底有什么意义呢?从实践的角度出发,PHP中接口的作用几乎为0,完全是鸡肋,上面的代码我们不定义接口,直接定义一个Chinese类也可以正常的工作,完全没有任何问题。目前PHP5中的接口,顶多只能用作类型提示,仅此一用而已。当然,类型提示可以让我们的某些设计更为清晰。

我们来看看怎样利用接口来完成类型提示(其实意义并不大)。


Java代码
  1. 1.public function doSomething($user) {   
  2. 2.    $user->eat();   
  3. 3.}  
  4. public function doSomething($user) {
  5.     $user->eat();
  6. }
复制代码
假如方法doSomething()需要传递一个User对象的实例,有可能使用这个方法的用户并不清楚$user是User对象的实例,所以有可能将代码写成下面这样:


Java代码
  1. 1.$user = "bing.peng";   
  2. 2.$test->doSomething($user);  
  3. $user = "bing.peng";
  4. $test->doSomething($user);
复制代码
那么当程序试图执行$user->eat()方法时,就会失败,因为用户并没有传入期望对象。我们来为doSomething()方法加入类型提示:

Java代码
  1. 1.public function doSomething(User $user) {   
  2. 2.    $user->eat();   
  3. 3.}  
  4. public function doSomething(User $user) {
  5.     $user->eat();
  6. }
复制代码
这样用户就可清晰的知道doSomething()需要的是User对象,从而避免一些低级的错误。但是由于PHP是动态语言,所以你还是可以乱写,如下:

Java代码
  1. 1.$user = "bing.peng";   
  2. 2.$test->doSomething($user);  
  3. $user = "bing.peng";
  4. $test->doSomething($user);
复制代码
执行代码时,你还是会失败,类型提示的作用也没有多大的意义,所以实践中PHP接口的作用几乎为0,我们平白无故的还会多出一段接口定义代码,如果你将接口代码放到一个单独的文件中,那么打开这些文件还需要花费时间,尽管它很少。

顺便说下我个人对PHP目前发展的一点小小的看法吧,PHP为了适应企业级开发,增加了很多面向对象的新特性,很多东西都是直接从Java中拿过来,比如接口,但是动态语言中真的不太需要接口这东西;比如类型提示,其实用处并不大。现在的PHP越来越复杂化了,有点不伦不类了,逐渐的背离了人民群众,要知道PHP能成为web开发第一语言,主要原因就是在于草根、简单,希望PHP的发展能越来越好。

论坛徽章:
0
2
发表于 2012-04-21 19:30
在公司用了款美~信CreCloud云网管,挺不错的,属于云计算技术理念和IT监控技术的完美结合,云网管的成功开发和应用,使云计算理念在IT监控领域落地,而且还是永久免费。http://www.mxsoft.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP