您的位置:首页 > 编程语言 > PHP开发

O'Reilly-现代php译文-特性01(2)

2016-05-11 07:42 531 查看
现代php语言有很多令人兴奋的新特性。这些特性中有很多将铭刻在从早些版本升级的php编程者,并且它对于从其他编程语言转到php程序员的一个好的惊喜。这些新特性使得php语言成为一个强大的平台并提供一个愉快的体验对于建立web应用和命令行工具。

一些新特性虽然不是必要的,但是会使我们的编程生活更加容易。然而,一些特性是必要的。例如,命名空间是现代php标准的一个基石并使开发实践成为理所当然(例如自动加载)。我将介绍每一个新特性,解释为什么它是有用的,并向你展示怎样改善你的项目。

我鼓励你跟着练习在你的电脑上。你会发现所有的代码例子在这本书的同伴-GitHub repository.

命名空间

如果只让我选择一个现代php特性告诉你,那一定是命名空间。命名空间在php5.3.0时被引入,它是组织php代码进入虚拟层次结构的一个重要工具,可以和你的操作系统的文件系统目录结构相媲美。每一个现代的PHP框架组件组织它的代码在全球唯一的供应商名称空间下,使它不冲突,或躺在其他供应商使用的通用类名称里。
当你走进一家咖啡店时,你也会讨厌桌子周围放着一些杂乱的书、电缆等诸如此类的东西。更别提他坐在一个唯一可用的电源插座旁边。他在浪费可能对你有用的价值空间。打个比方,这个人没有利用空间。不要成为这样的人。
让我们来看看一个真实的PHP组件使用的命名空间。symfony框架自己的symfony/httpfoundation是一个流行的管理http请求和响应的php组件。更重要的是,symfony / httpfoundation组件用了类似Request, Response, and Cookie等常见的类名。我敢保证你也用了很多其他类似这样类名的php组件。如果其他php代码用了相同的类名,我们该如何使用这个symfony/httpfoundation
php组件。我们可以安全使用symfony / httpfoundation组件正是因为它的代码是放置在唯一的symfony的供应商命名空间。访问GitHub上symfony / httpfoundation组件,导航到response.php文件。它看起来像图2-1。仔细看第12行,它包含这样一条代码:namespace Symfony\Component\HttpFoundation; 这是一个php命名空间声明,它总是出现在紧挨<?php标签的新起一行。这条特殊的命名空间声明告诉我们几件事情。首先,我们知道这个响应类在symfony的供应商命名空间的下面。知道响应类在这个组件的子命名空间里面。也知道这个响应类在叫做HttpFoundation的其他子命名空间里。你可以浏览一下response.php旁边的其他文件,你会发现他们使用了同样的命名空间声明。一个命名空间(或subnamespace)封装和组织相关的PHP类,就像一个文件系统目录中的相关文件。
空间之间以‘\’符号分隔。
不像你操作系统的物理文件系统那样,php命名空间是一个虚拟的概念,没必要和文件系统目录一一对应。也就是说,大多数php组件实际上比照文件系统目录来布置命名空间是为了流行的psr-4标准这样的兼容性(我们会在第3章讨论更多)。
严格意义上讲,命名空间只是一个php语言符号,被php解释器引用并用来适应一系列类,接口,函数和常量的前缀。
为什么使用命名空间
命名空间是重要的因为它让我们创建了沙箱一样的代码,可以工作在其他开发者代码的旁边。这是现代PHP组成的生态系统的基础概念。框架组件作者为大量php开发者创建并描述命名空间使他们不用知道或控制就可以使用在类,接口,函数和常量里。这个问题也同样适用你自己的项目里。如果你在一个项目中适用传统的php组件或类,这个代码一定和你的项目是第三方的关系。
正如我早些时候提到symfony/httpfoundation组件一样,你的代码和其他开发者的代码可能是用同一个类名,接口,函数或常量名字。没有命名空间,名字冲突会引起php报错。有了命名空间,你的代码可以和其他开发者的代码用相同名字的类、接口、函数或常量名字声明在唯一的供应商命名空间吓下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: