PHP 中命名空间(namespace)是在 PHP5.3 中加入的,如果你了解过 C++ 的话,那命名空间就不算什么新事物了。不过命名空间在 PHP 当中还是相当重要的。
PHP 命名空间可以解决以下两类问题:
用户编写的代码与 PHP 内部的类/函数/常量或第三方类/函数/常量之间的命名冲突;
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,以提高源代码的可读性。
1) 定义命名空间(使用关键字 namespace)
虽然任意合法的 PHP 代码都可以包含在命名空间中,但只有类(包括抽象类和 traits)、接口、函数和常量等类型的代码受命名空间的影响。
命名空间的定义需要通过关键字 namespace 来声明,语法格式如下:
namespace 命名空间名;
【示例】下面我们来演示一下如何定义了命名空间:
<?php
namespace MyProject; // 定义名为 MyProject 的命名空间。
const CONNECT_OK = 1;
class Myclass {
/* … */
}
function Myfunc() {
/* … */
}
?>
在声明命名空间之前除了用于定义源文件编码方式的 declare 语句外,所有非 PHP 代码(包括空白符)都不能出现在命名空间声明之前。 另外,与 PHP 其它的语言特征不同,同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中。
2) 定义子命名空间
与目录和文件的关系很象,PHP 中的命名空间也允许指定层次化的命名空间名称。因此,命名空间的名字可以使用分层次的方式定义:
namespace App\Model; namespace App\Controller\Home;