php命名空間的一個最明確的作用是解決重名問題,PHP中不允許兩個函數或類別出現相同的名字,否則會產生一個致命的錯誤。上一章介紹了什麼是php命名空間。 php官網已很明確的進行了定義並形象化解釋,這裡直接從php官網copy一段文字:從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以看到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,而對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 檔案。另外,在目錄 /home/greg 外存取 foo.txt 檔案時,我們必須將目錄名稱以及目錄分隔符號放在檔案名稱之前得到 /home/greg/foo.txt。這個原理應用在程式設計領域就是命名空間的概念。
php命名空間引入namespace關鍵字就是為了解決php物件導向程式設計過程中已出現的各種「麻煩」;具體麻煩如下:
#使用者所寫的程式碼與PHP內部的類別/函數/常數或第三方類別/函數/常數之間的名字衝突。
為了緩解麻煩1,通常在寫各種class時會使用較長的類別名稱或為實作不同功能的class加上名稱前綴(或後綴)。
不使用魔法函數__autoload的情況下,而每個class又獨佔一個php檔案時,為了呼叫不同的class,會在使用這些class的另外的php檔案的開頭位置書寫較多的include(或require或require_once)語句。
我們先建立命名空間,在同一腳本檔案中可以建立多個命名空間。
其程式碼如下:
<?php //创建一个名为'Article'的命名空间 namespace Article; //此Comment属于Article空间的元素 class Comment { } //创建一个名为'MessageBoard'的命名空间 namespace MessageBoard; //此Comment属于MessageBoard空间的元素 class Comment { } ?>
在不同空間之間不可以直接呼叫其它元素,需要使用命名空間的語法。
其範例程式碼如下所示:
<?php namespace Article; class Comment { } namespace MessageBoard; class Comment { } //调用当前空间(MessageBoard)的Comment类 $comment = new Comment(); //调用Article空间的Comment类 $article_comment = new \Article\Comment(); ?>
可以看到,在MessageBoard空間中呼叫article空間裡的Comment類別時,使用了一個像檔案路徑的語法: \空間名稱\元素名稱
除了類別之外,對函數和常數的用法是一樣的,下面我為兩個空間創建了新的元素,並在MessageBoard空間中輸出了它們的值。
其程式碼如下:
<?php namespace Article; const PATH = '/article'; function getCommentTotal() { return 100; } class Comment { } namespace MessageBoard; const PATH = '/message_board'; function getCommentTotal() { return 300; } class Comment { } //调用当前空间的常量、函数和类 echo PATH; //message_board echo getCommentTotal(); //300 $comment = new Comment(); //调用Article空间的常量、函数和类 echo \Article\PATH; //article echo \Article\getCommentTotal(); //100 $article_comment = new \Article\Comment(); ?>
就得到如下的結果:/message_board300/article100
【相關教學推薦】
2. 影片教學:命名空間:我們雖然同名同性,但卻屬於不同時空
以上是php命名空間的作用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!