* 命名空間的宣告與使用
* 1.使用關鍵字:namespace
* 2.php5.3
* 3.namespace 之前不能有除了declare和註解以外的任何程式碼,html也不行
* 4.命名空間預設從全域開始定位,全域空間用\表示,類似於根目錄
* 5.如果目前腳本宣告了命名空間,則所有成員的存取,就必須使用命名空間,包括系統函數
//1. 宣告一個命名空間
namespace one; class Demo{public $name='Peter Zhu';} const SITE='PHP中文网'; function add($a,$b){return $a+$b;}
//如果我想宣告同名的類別,常數與函數可以再宣告一個命名空間
//2.一個腳本中允許有多個命名空間
//宣告命名空間:two,使用\tow\來引用
namespace two;
//現在宣告類別Demo,常數SITE,函數add,則不會衝突
class Demo{public $name='朱老师';} const SITE = 'www.php.cn'; function add($a,$b){return $a+$b;}
//相信大家看出來了,這非常像是在不同的目錄下面,允許創建同名檔案,原理是一樣的
echo (new Demo)->name, '<br>'; //默认输出的是当前空间的内容
//查看一下當前的命名空間是什麼?使用系統預置常數:__NAMESPACE__
echo '当前命名空间是: ',__NAMESPACE__,'<br>';
/ /也可以帶上目前的命名空間來存取目前空間中的成員
//產生具有目前命名空間的類別名稱
$className = __NAMESPACE__.'\Demo'; echo (new $className)->name,'<br>';
//可以帶上完整的命名空間名稱,從全域空間\開始,相當於從根目錄開始
//專業術語: 完全限定名稱
echo (new \two\Demo)->name, '<hr>';
//3.如何實作跨空間存取?
//如果我們要存取空間one中的Demo類別中的屬性,如何操作呢?
//跨空間存取,與跨目錄存取檔案一樣,一定要帶上它完整的空間路徑
//例如我們要存取one空間的類別Demo中的成員
echo 'one空间的类成员:',(new \one\Demo)->name,'<br>';
//4.在宣告了命名空間的腳本中,如何存取系統預先定義方法?
//例如宣告了一個單字元數組
$welcome = 'php中文网欢迎您'; \print_r($welcome); echo '<br>'; print($welcome); echo '<hr>';
//剛才我們說過,在空間中存取全域成員,必須要加\,這裡沒有加為什麼可以?
//因為如果使用者沒有加入,那麼會先在本空間中尋找有沒有var_dump()函數,
//如果沒有找到,再到全域空間查找,所以不報錯
//但如果我們在目前的two空間中也建立一個var_dump()函數,則只會執行
//目前空間中使用者自訂的var_dump(),系統同名函數不會被呼叫
#function print_r($arg) { echo '我是当前空间声明的函数调用:'.$arg; } print_r($welcome); echo '<br>';
//等價呼叫語法:
\two\print_r($welcome);
//注意: 此print_r(),與系統內建的print_r()無任何關係,僅名稱相同而已
#//就好比,上海有條長江路,咱們合肥也有一條長江路一樣,這二條路除名稱一樣,再無任何關係
// 上海市寶山區長江路
#//合肥市廬陽區長江路
// 相信沒有人會認為這是同一條路?
//事實上,這二個函數的完整調用語句應該是這樣的:
//1.呼叫系統的:
\print_r($welcome);
//2.呼叫目前空間的:
\two\print_r($welcome);
//儘管後面名稱一樣,但是歸屬地是不同的
以上是php中命名空間的聲明與使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!