PHP命名空間入門教程


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

命名空間概述

定義命名空間

定義子命名空間

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

使用命名空間:基礎

命名空間和動態語言特征

namespace關鍵字和__NAMESPACE__常量

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

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

全局空間

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

名稱解析規則

FAQ: things you need to know about namespaces

 


 

學習、實踐筆記:

1、定義命名空間時,命名空間開頭不能有反轉義符“\”,即 namespace \A\B\C; 是錯誤的,此命名空間將不起作用!namespace A\B\C; 才是對的。

2、導入命名空間時,如果命名空間是一級的,則開頭一定要加反轉義符“\”,即 use A; 是錯誤的,use \A; 才是對的。

3、導入命名空間時,如果命名空間是二級或更多級的,則開頭有沒有加反轉義符“\”效果都是一樣,即都表示 完全限定名稱,如 use A\B\C;use \A\B\C; 是等效的。(如果是多級的,建議開頭不加“\”)

4、對於“非限定名稱函數/常量”,如果 當前命名空間 有,則調用當前命名空間下的該 函數/常量,否則,繼續到 全局命名空間 下去找,有,則調用,沒有,則報錯!

5、對於“非限定名稱”,如果 當前命名看空間 有,則調用當前命名空間下的該 ,沒有,則調用__autoload函數,還沒有的話,就直接報錯!即不會繼續到 全局命名空間 下去找了!

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

7、對於“限定名稱”,如果 當前命名看空間 有,則調用當前命名空間下的該 限定名稱類,沒有,則調用__autoload函數,還沒有的話,就直接報錯!即不會繼續到 全局命名空間 下去找了!

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

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

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

 


 

使用建議:

1、強烈推薦使用“命名空間”的功能;

2、只把“”命令空間化,其他的(如函數、常量)最好還是設計為全局性,即放在全局命名空間中,方便調用;

3、命名空間 + autoload機制,實現“類文件”自動加載;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM