版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asty9000/article/details/83383704
魔术常量__NAMESPACE__返回当前命名空间的名称,如果是在全局范围中则返回空字符串。关键字namespace除了可以定义命名空间,还可以用来访问当前命名空间或子命名空间中的元素。
为了编码方便,PHP允许使用use关键字导入外部的完全限定名称,并可选择使用as关键字为其创建别名。PHP5.3起,可以导入类、接口或命名空间并创建别名,PHP5.6起,增加了对函数和常量的导入和别名的创建。
use语句中的命名空间总是按完全限定名来解析的。为了简化操作,同种类别的导入,可以用一个use关键字后面可以跟多个语句,语句之间用逗号分隔。不能对全局命名空间设置别名。
同一个文件的同一命名空间中,导入的类、函数与常量的别名不能与当前命名空间中存在。
<?php
namespace a\b {
//a.php
class A{
function __construct(){
echo "A in ".__NAMESPACE__;
}
}
class B{
function __construct(){
echo "B in ".__NAMESPACE__;
}
}
function foo(){
echo "foo in ".__NAMESPACE__;
}
}
?>
<?php
namespace a\c {
//b.php
class B{
function __construct(){
echo "B in ".__NAMESPACE__;
}
}
function f(){
echo "foo in ".__NAMESPACE__;
}
}
?>
<?php
namespace a\c{
//c.php
include 'a.php';
include 'b.php';
use a\b\A as B,a\b\B as C;
use function a\b\foo as f;
f();//调用的是a\b\foo
namespace\f();//调用的是a\c\f
var_dump(new B());//创建的是a\b\A的对象
var_dump(new namespace\B());//创建的是a\c\B的对象
var_dump(new C());//创建的是a\b\B的对象
}
?>