php命名空間的作用詳解

來源:互聯網
上載者:User
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物件導向編程過程中已出現的各種“麻煩”;具體麻煩如下:

  1. 使用者編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。

  2. 為了緩解麻煩1,通常編寫各種class時會使用較長的類名或為實現不同功能的class添加名稱首碼(或尾碼)。

  3. 不使用魔法函數__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 { }?>

在不同空間之間不可以直接調用其它元素,需要使用命名空間的文法。

其範例程式碼如下所示:

<?phpnamespace Article;class Comment { }namespace MessageBoard;class Comment { }//調用當前空間(MessageBoard)的Comment類$comment = new Comment();//調用Article空間的Comment類$article_comment = new \Article\Comment();?>

可以看到,在MessageBoard空間中調用article空間裡的Comment類時,使用了一種像檔案路徑的文法: \空間名\元素名

除了類之外,對函數和常量的用法是一樣的,下面我為兩個空間建立了新的元素,並在MessageBoard空間中輸出了它們的值。

其代碼如下:

<?phpnamespace 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_boardecho getCommentTotal(); //300$comment = new Comment();//調用Article空間的常量、函數和類echo \Article\PATH; //articleecho \Article\getCommentTotal(); //100$article_comment = new \Article\Comment();?>

就得到如下的結果:/message_board300/article100


【相關教程推薦】

1. 《php.cn獨孤九賤(4)-php視頻教程》

2. 視頻教程:命名空間:我們雖然同名同性,但卻屬於不同時空

3. php編程從入門到精通全套教程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.