关于更多命名空间内容请查看PHP帮助手册点击打开链接
在PHP中,命名空间用来解决在编写类库或应用程序时可能碰到的两类问题:
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称创建一个别名(或简短)的名称,提高源代码的可读性。
虽然任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。
命名空间通过关键字:namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。
<?php
namespace nameSpaceName;
//php代码
?>
导入其他命名空间的内容通过操作符use实现的。
// 导入一个全局类
use \ ArrayObject ;
同一个命名空间可以定义在多个文件中,也允许指定层次化的命名空间的名称。
namespace MyProject \ Sub \ Level ;
也可以在同一个文件中定义多个命名空间。
<?php
namespace MyProject1 {
function A(){ /*...*/ };
}
namespace MyProject2{
function A(){ /*...*/ };
}
?>
在实际项目中,不提倡在同一个文件中定义多个命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。
将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来。
<?php
namespace A;
namespace {
//全局代码
//由于全局代码和命名空间组合在一起,所以全局代码必须使用不带名称的namespace语句加大括号括起来。
}
?>
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,在名称前加上前缀"\" 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。
namespace A \ B{
function fopen () {
/* ... */
$f = \ fopen (...); // 调用全局的fopen函数
return $f ;
}
命名空间的名称定义
1.非限定名称(Unqualified name)名称中不包含命名空间分隔符的标识符,例如 "namespace Foo"
名称中含有命名空间分隔符的标识符,例如 "namespace Foo\Bar"
名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如" namespace \Foo\Bar"。" namespace \Foo "也是一个完全限定名称。