「命名空間」(namespace)是一種命名方式,用來組織各個類別,函式、常數等,它和這些元素的關係就像檔案系統中目錄與檔案的關係一樣,舉例來說,假設MyClass隸屬於 \A\B\C 命名空間,那麼若要建立一個名稱為Obj、隸屬於MyClass的物件,可以寫成如下:
$Obj = new \A\B\C\MyClass;
其中第一個反斜線 \ 表示「全域空間」(global space),就像檔案系統中的根目錄一樣,在PHP開始支援命名空間之前,或當PHP程式沒有定義任何命名空間時,所有類別、函式、常數等都是放在全域空間,至於其它反斜線 \ 則是用來連接命名空間內所包含的子命名空間、類別、函式、常數等,例如此處的 A、B、C均為子命名空間。
PHP支援命名空間目的:
- 解決名稱衝突的問題:當您自己撰寫的PHP程式和PHP內建或其它人撰寫的類別、函式、常數發生名稱衝突時,可以利用命名空間來解決。
- 提供設定別名的功能:當PHP程式裡面的類別、函式或常數的名稱太長或不易理解時,可以利用命名空間來設定簡短易讀的別名(alias)。
事實上,如果程式裡沒有遇到上面的問題,可以不用理會命名空間的概念,因為程式依然能夠正常執行,以下面兩段程式碼為例,功能是相同的,只是第二段程式碼有加入命名空間的概念。
<?php
$Obj = new Class1;
?>
<?php
$Obj = new \Class1;
?>
原則上,命名空間的命名方式及分類是依照類別、函式、常數的性質而定,同時PHP程式均放在全域空間 \ 內。若要在PHP程式中自訂命名空間,可以使用namespace關鍵字,下面是一個例子,它會在網頁上顯示變數Y的值,要注意的是namespace敘述必須放在檔案的最前端。
<?php
namespace my\name; //在全域範圍內定義my\name命名空間
class MyClass {} //在\my\name命名空間內定義MyClass類別
function Myfunction() {} //在\my\name命名空間內定義Myfunction函式
const MYCONST = 1; //在\my\name命名空間內定義MYCONST常數
$X = new \my\name\MyClass; //建立MyClass類別的物件,寫成$X = new MyClass;亦可
$Y = \my\name\MYCONST; //定義Y為常數MYCONST,寫成$Y = MYCONST;亦可
echo $Y; //顯示Y的値
?>
如果使用 use 關鍵字將 my\name 命名空間的別名設定為 A 並插在 namespace my\name; 這行下面
use my\name as A;
這樣 $X = new \my\name\MyClass; 和 $Y = \my\name\MYCONST;
可以改成
$X = new A\MyClass;
$Y = A\MYCONST;
留言列表