命名空间(namescript)也是一种组织代码的方式,在很多现代编程语言中都有相应的实现,如C#、Java(称为包,package)等。
使用命名空间,可以在大型项目中更有效地对各种功能代码进行封装和管理,特别是在有同名的类等编程元素的时候,通过不同的命名空间,可以有效地将它们区分,避免同名资源带来的一系列问题。
到现在为止,我们的PHP代码都没有定义命名空间,此时,这些代码称为全局代码;如果我们需要将代码定义到命名空间中,可以使用如下格式(/myns.php文件)。
<?php
namespace myns
{
class ClsA
{
public function work()
{
echo __METHOD__;
}
}
}
?>
定义命名空间时使用namespace关键字,并将资源包含在一对花括号内;如果命名空间有更多的层次,可以使用“\”符号进行分隔,如“namespace a\b\c”。
将资源定义在命名空间中以后,在其它页面中,我们可以使用如下方法引用这个类。
<?php
require_once _SERVER["DOCUMENT_ROOT"]."/ns.php";obj = new \myns\ClsA();
$obj->work();
?>
如果在一个页面中需要多次使用这个类,我们可以定义这个类的别名以简化类名的书写,此时,可以使用use语句,如下面的代码。
<?php
require_once _SERVER["DOCUMENT_ROOT"]."/ns.php";
use \myns\ClsA;obj = new ClsA();
$obj->work();
?>
如果出现同名资源,我们还可以给它们定义不同的别名,这里应该在use语句中添加as关键字指定别名,如:
use \myns\ClsA as ClsA1;
$obj = new ClsA1();
此外,在代码中,我们可以使用 NAMESPACE 常量获取代码所在的命名空间,而全局资源是没有命名空间的。