1、什麼是命名空間以及如何定義命名空間
#一般情況下,在一個php程式原始碼檔案或同一個請求中是不允許有兩個以上相同名稱的類別名稱、常數名稱或函數名稱的,這樣的話,程式在運作的時候就會報錯。但是,在許多實際情況下,我們是無法避免在同一個檔案下有兩個以上相同名稱的類別名稱、常數名稱或函數名稱的。這種情況下就需要引入命名空間。
範例:
<?php function getUser () { return $username1; } function getUser () { return $username2; }
像這樣的程式在執行的時候是會報錯的。所以我們引入命名空間,如下:
<?php namespace get1function getUser () { return $username1; } namespace get2 function getUser () { return $username2; }
如何理解命名空間的意義呢?以上面的程式碼為例,我們把這個PHP文件想像成是一個文件夾,而裡面的兩個函數想像成是兩個文件,但是在同一個文件夾下是不允許有兩個相同名稱的文件的,所以我們就必須的將他們分到兩個不同名稱的資料夾。命名空間的道理就是這樣的。
特別注意:
命名空間只對類別名稱、函數名稱、常數(const定義的)有效。
一個檔案的最前面的namespace前面不能有任何有效的字元
2、如何使用命名空間?
例如,我們要如何使用上面定義的get2下的getUser()呢?
1)在存取函數(或常數、類別名稱)的時候,不指定所在命名空間時,採用就近原則存取(存取目前命名空間下的)。
2)那麼,如何存取指定命名空間下的內容呢?如下:
\get1\getUser(); // 访问get1下的getUser()方法
3、多層命名空間及三種存取方式
1)多層命名空間:
想像一下,如果一個PHP專案檔案是一個文件夾,而一個資料夾下面也會有一級子資料夾,而在一級子資料夾下又有子資料夾(二級子資料夾),命名空間也是同樣的道理,一個命名空間下,可能還有命名空間,這就是所謂的多層命名空間,例如thinkPHP中:
namespace app\Index\Controller;
這就是一個多層命名空間。至於造訪方式同一般命與名空間中的一樣。
2)命名空間的三種存取方式(和相對路徑與絕對路徑相似)
A.非限定名稱存取方式
B. 限定名稱存取方式
C. 完全限定名稱存取方式
<?php namespace app\get1 function getUser () { return $username1; } namespace get2 function getUser () { return $username2; } getUser(); // 非限定名称访问方式 \app\get1\getUser(); //完全限定名称访问方式,从根路径开始,类似绝对路径 app\get1\getUser(); //限定名称访问方式,不是从根路径开始,类似相对路径
4、命名空間的引入機制
1)空間的引入:關鍵字use,注意:當移入空間後,必須要用限定名稱存取方式訪問引入空間裡面的函數(或類別、常數),不能使用非限定名稱方式訪問,這樣會訪問到目前命名空間下的函數(或類別、常數)。
2)空間類別元素的引入:關鍵字use。注意:只能引入類,然後可以使用非限定名稱存取。
更過相關內容請上PHP中文網:PHP影片教學
#以上是php namespacee原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!