PHP命名空間入門教程

PHP5.3當中就引入了「命名空間」的概念,一直都沒怎麼關注和使用,其實學習它也挺簡單的,看官方的教程就好了:php

命名空間概述html

定義命名空間函數

定義子命名空間學習

在同一個文件中定義多個命名空間spa

使用命名空間:基礎.net

命名空間和動態語言特徵設計

namespace關鍵字和__NAMESPACE__常量htm

使用命名空間:別名/導入blog

注意:PHP 命名空間目前僅支持 類名稱命名空間 的導入,暫不支持導入函數或常量!教程

全局空間

使用命名空間:後備全局函數/常量

名稱解析規則

FAQ: things you need to know about namespaces

 


 

學習、實踐筆記:

一、定義命名空間時,命名空間開頭不能有反轉義符「\」,即 namespace \A\B\C; 是錯誤的,此命名空間將不起做用!namespace A\B\C; 纔是對的。

二、導入命名空間時,若是命名空間是一級的,則開頭必定要加反轉義符「\」,即 use A; 是錯誤的,use \A; 纔是對的。

三、導入命名空間時,若是命名空間是二級或更多級的,則開頭有沒有加反轉義符「\」效果都是同樣,即都表示 徹底限定名稱,如 use A\B\C;use \A\B\C; 是等效的。(若是是多級的,建議開頭不加「\」)

四、對於「非限定名稱函數/常量」,若是 當前命名空間 有,則調用當前命名空間下的該 函數/常量,不然,繼續到 全局命名空間 下去找,有,則調用,沒有,則報錯!

五、對於「非限定名稱」,若是 當前命名看空間 有,則調用當前命名空間下的該 ,沒有,則調用__autoload函數,尚未的話,就直接報錯!即不會繼續到 全局命名空間 下去找了!

六、對於「限定名稱函數/常量」,若是 當前命名看空間 有,則調用當前命名空間下的該 限定名稱函數/常量,沒有,則直接報錯!即不會繼續到 全局命名空間 下去找了!

七、對於「限定名稱」,若是 當前命名看空間 有,則調用當前命名空間下的該 限定名稱類,沒有,則調用__autoload函數,尚未的話,就直接報錯!即不會繼續到 全局命名空間 下去找了!

八、上面說的常量指的是經過關鍵字const定義的常量,而函數define()定義的常量是不受命名空間影響的,即在任何地方均可用,具備全局性!另外 global 變量也不受命名空間影響!

附:PHP常量詳解:define和const的區別

額,補充一點,還有可能到 導入的命名空間 下去找!

 


 

使用建議:

一、強烈推薦使用「命名空間」的功能;

二、只把「」命令空間化,其餘的(如函數、常量)最好仍是設計爲全局性,即放在全局命名空間中,方便調用;

三、命名空間 + autoload機制,實現「類文件」自動加載;

相關文章
相關標籤/搜索