3.8 命名空间
PHP命名空间(namespace)是在PHP 5.3中加入的,如果学过C#和Java,那命名空间就不是什么“新事物”了。不过在PHP当中还是有着相当重要的意义。
3.8.1 命名空间概述
PHP中的命名空间其实就是容器,起到封装的作用,可以放入常量、函数和类。
命名空间一个最明确的目的就是解决重名问题。PHP中不允许两个函数或类有相同的名字,否则会产生一个致命的错误。PHP命名空间可以解决以下两类问题:
(1)用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突时。
(2)为很长的标识符名称创建一个别名(或简短的名称),提高源代码的可读性。
3.8.2 定义命名空间
命名空间通过关键字namespace声明。如果一个文件中包含命名空间,必须在其他所有代码之前声明命名空间。语法格式如下:
也可以在同一个文件中定义不同的命名空间,代码如下:
但是不建议使用这种语法在单个文件中定义多个命名空间。建议使用下面的花括号形式的语法。
将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用花括号形式的语法。全局代码必须用一个不带名称的namespace语句加上花括号括起来。
【例3-25】(实例文件:ch03\Chap3.25.php)非命名空间与命名空间的代码组合。
图3-20 非命名空间与命名空间的代码组合
在IE浏览器中运行结果如图3-20所示。
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的declare语句。所有非PHP代码(包括空白符)都不能出现在命名空间的声明之前。
以下代码会出现语法错误,因为在命名空间之前出现了<html>标签。
3.8.3 使用命名空间
介绍了如何定义命名空间,下面通过一个简单的实例来看一下如何使用。
在文件中定义了两个命名空间,分别为MyName1和MyName2,在这两个命名空间中,分别定义了常量、函数和类,然后在MyName2命名空间中调用MyName1命名空间的常量、函数和类。
【例3-26】(实例文件:ch03\Chap3.26.php)使用命名空间。
在IE浏览器中运行结果如图3-21所示。
图3-21 使用命名空间