`
重庆PHP
  • 浏览: 5405 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

PHP中接口的讨论

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


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

实现接口:
class Chinese implements User {
    public function eat() {
	echo "eat chinese food!";
    }
    public function sleep() {
	echo "sleep..."
    }
}


上面的代码在PHP编程中到底有什么意义呢?从实践的角度出发,PHP中接口的作用几乎为0,完全是鸡肋,上面的代码我们不定义接口,直接定义一个Chinese类也可以正常的工作,完全没有任何问题。目前PHP5中的接口,顶多只能用作类型提示,仅此一用而已。当然,类型提示可以让我们的某些设计更为清晰。

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

public function doSomething($user) {
    $user->eat();
}


假如方法doSomething()需要传递一个User对象的实例,有可能使用这个方法的用户并不清楚$user是User对象的实例,所以有可能将代码写成下面这样:

$user = "bing.peng";
$test->doSomething($user);

那么当程序试图执行$user->eat()方法时,就会失败,因为用户并没有传入期望对象。我们来为doSomething()方法加入类型提示:
public function doSomething(User $user) {
    $user->eat();
}

这样用户就可清晰的知道doSomething()需要的是User对象,从而避免一些低级的错误。但是由于PHP是动态语言,所以你还是可以乱写,如下:
$user = "bing.peng";
$test->doSomething($user);

执行代码时,你还是会失败,类型提示的作用也没有多大的意义,所以实践中PHP接口的作用几乎为0,我们平白无故的还会多出一段接口定义代码,如果你将接口代码放到一个单独的文件中,那么打开这些文件还需要花费时间,尽管它很少。

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

分享到:
评论

相关推荐

    深入PHP 面向对象 模式与实践第3版(完整版) 35M

    首先介绍了PHP的OO特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在PHP中实现几个关键的...

    PHP4.0 高级篇

    9.10 源代码讨论 231 9.10.1 模块结构 231 9.10.2 标题文件包含 231 9.10.3 声明输出函数 232 9.10.4 Zend函数块的声明 232 9.10.5 Zend模块的声明 234 9.10.6 Get_module()的执行 236 9.10.7 所有输出函数的实施 ...

    PHPWeb开发技术指南——pdf格式

    9.10 源代码讨论 231 9.10.1 模块结构 231 9.10.2 标题文件包含 231 9.10.3 声明输出函数 232 9.10.4 Zend函数块的声明 232 9.10.5 Zend模块的声明 234 9.10.6 Get_module()的执行 236 9.10.7 所有输出函数的实施 ...

    深入PHP面向对象、模式与实践 (第2版)》 part2

    首先介绍了php的oo特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在php中实现几个关键的...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    9-24 4.php文件编程③-文件的上传和下载 文件上传细节讨论 9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 ...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    9-24 4.php文件编程③-文件的上传和下载 文件上传细节讨论 9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 ...

    深入PHP面向对象、模式与实践 (第2版) part1

    首先介绍了php的oo特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在php中实现几个关键的...

    jsonstreamingparser:PHP中的JSON流解析器实现

    有关更多详细信息,我对作了更详细的说明,其中讨论了与标准PHP JSON解析器之间的优缺点。 如果您曾经使用过另一种语言的XML(甚至JSON)的,那就是这样。 除了PHP中的JSON。 该软件包与 , 和兼容。 如果您发现...

    php实现根据IP地址获取其所在省市的方法

    今天,就讨论一下在PHP中如何获取用户IP地址、PHP根据IP判断用户所在城市以及PHP根据IP实现城市切换或跳转的问题。

    php飞信 pafetion 开源

    这是一个用php开发的飞信 暂时还不需要验证码 接口参数参见飞信API发送接口v2 通信的说明参见源码里面或者是这篇文档 pafetion(Version 1.0) (68) 2.41kb 点击下载 * 注意 : 请不要将此脚本用于商业用途.. * ...

    (全)传智播客PHP就业班视频完整课程

    9-24 4.php文件编程③-文件的上传和下载 文件上传细节讨论 9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 ...

    java接口与类.doc

    最近看到论坛里有个帖子在讨论接口和抽象类的区别和作用,这其实也是很多面试官喜欢问的问题,这里我就说说我的总结,顺便说说内部类的作用,当是给刚入门,或者想学习java的同学们能更好的理解它们的用法。

    天涯开放平台sdk v1.0

    一键转发,天涯秀,签名档,天涯赞,实时讨论,天涯邀请在线获取App key和App secret以便调用我们开放的API授权、用户、微博、社交关系相关的几十个接口,详见API文档已经发布的应用会在天涯应用中聚合展示给天涯...

    WebIM-for-PHP5 v1.0.zip

    插件类, 参考示例代码,实现下述接口: user() 初始化WebIM当前的用户对象,一般从SESSION和数据库读取 buddies($uid) 读取当前用户的在线好友列表 buddiesByIds($uid, $ids) 根据ids列表读取好友列表 rooms($uid)...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-24 4.php文件编程③-文件的上传和下载 文件上传细节讨论 9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 ...

    keloop:Keloop开发接口文档

    快跑者开放接口对接讨论 QQ 群:438529770 快跑者开放接口正式版已经更新,请对接测试版(V1、V2、V3)开放接口的第三方系统切换到正式版!!! 快跑者开放平台: 正式版开放接口文档地址: 正式版开放接口说明: 快...

    基于php的校园微博系统-论文.zip

    6. RESTful API:设计REST风格的API接口,便于前后端分离开发和第三方集成。 7. 服务器技术:可能使用Nginx或Apache作为Web服务器来托管网站。 8. 缓存技术:可能使用Memcached或Redis等缓存技术来提升系统性能。 ...

    PHP JS头像截取工具

    后台 前台均有设置接口,非常简单 2:商城商品图片切割,例如这个商品图片,有的图像部份我要去掉,那么shearphoto就能帮助你进行切割,又例如这个图片太大了,我想切小点,shearphoto也能帮你实现 3:在线美工切图...

    Moovico:Moovico 是一个强大、快速、可扩展的基于 PHP 的 MVC 框架和 ORM

    开箱即用地讨论 json、xml、html、纯文本。 ExtJS/Sencha 应用程序的理想伴侣。 要求 网络服务器(废话!) - 在 lighttpd/php-cgi 和 nginx/php-fpm 上测试 PHP >= 5.3 with mysqli-support 如果你想使用连接器。...

    shearphoto1.1+PHP头像截取,头像上传,切图工具,升级版!

    后台 前台均有设置接口,非常简单 2:商城商品图片切割,例如这个商品图片,有的图像部份我要去掉,那么shearphoto就能帮助你进行切割,又例如这个图片太大了,我想切小点,shearphoto也能帮你实现 3:在线美工切图...

Global site tag (gtag.js) - Google Analytics