命名空間和檔案系統的結構很像,資料夾可以有子資料夾,命名空間也可以定義子空間來描述各個空間之間的所屬關係。上一章介紹了什麼是命名空間?以及php命名空間的基本應用,這裡我們開始了解下命名空間的子空間與公共空間。
透過下面的例子來說明什麼是子空間
#例如, cart 和order 這兩個模組都處於同一個shop 專案內,透過命名空間子空間表達關係。
程式碼如下:
<?php namespace shop\cart; //命名空间表示处于 shop 项目下的 cart class Test { } namespace shop\order; //命名空间表示处于 shop 项目下的 order class Test { //申明与上面空间相同的类 } $test =new Test(); //调用当前的类 $cart = new \shop\cart\Test(); //调用shop\cart空间的类 ?>
命名空間的子空間還可以定義很多層次,例如 cn\my\www\shop 。多層子空間的聲明通常使用公司網域的倒置,再加上項目名稱組合而成。這樣做的好處是網域在網路上是不重複的,不會出現和網路同名的命名空間,還可以辨別出是哪家公司的具體項目。有很強的廣告效應。
命名空間中的公共空間
命名空間的公共空間很容易理解,其實沒有定義命名空間的方法、類別庫和常數都預設歸屬於公共空間,這樣就解釋了在先前版本編寫的程式碼大部分都可以在PHP5.3 以後的版本中運行。另外,公共空間中的程式碼段被引入到某個命名空間下以後,該公共空間中的程式碼段不屬於任何命名空間。例如,聲明一個腳本檔 common.php,在文件中聲明的函數和類別。
其程式碼如下:
<?php function fun(){ } class Demo{ } ?>
再建立一個PHP 文件,並在一個命名空間中引入這個腳本文件common.php,但可腳本裡的類別和函數並不會歸屬到這個命名空間。如果這個腳本裡沒有定義其他命名空間,它的元素就一直處於公共空間。
程式碼如下:
<?php namespace cn\my; include 'common.php'; //引入当前目录下的文件 $demo = new Demo; //出现致命错误:找不到 cn\my\Demo类 $demo = new \Demo(); //正确的方式 加上 \ var_dump(); // 错误,系统函数在公共空间 \var_dump(); // 正确,使用了 \ ?>
說明:呼叫公共空間的方式是直接在元素名稱前面加上 \ 就可以了,否則PHP 解析器會認為使用者像呼叫目前空間下的元素。除了自訂的元素,還包括 PHP 自帶的元素,都屬於公共空間。其實公共空間的函數和常數不用加 \ 也可以正常調用,但是為了正確區分元素所在區域,還是建議調用函數的時候加上 \ 。
命名空間的子空間和公共空間就介紹到這裡,下一節帶給大家的是#命名空間中的三種名稱和術語。
【相關教學推薦】
2 . 影片教學:命名空間:我們雖然同名同性,但卻屬於不同時空
以上是php命名空間:子空間與公共空間實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!