1. 程式人生 > >PHP名稱空間匯入、別名

PHP名稱空間匯入、別名

魔術常量__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的物件
}
?>