PHP命名空间导入、别名

版权声明:本文为博主原创文章,未经博主允许不得转载。 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的对象
}
?>

猜你喜欢

转载自blog.csdn.net/asty9000/article/details/83383704