php命名空間 php空間命名

1、命名空間概述從廣義上來說,命名空間是一種封裝事物的方法 。
2、好處用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突

php命名空間 php空間命名

文章插圖
為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性
3、影響范圍類(包括抽象類和traits)、接口、函數和常量
4、解析規則 4.1、命名空間名稱定義非限定名稱Unqualified name
名稱中不包含命名空間分隔符的標識符,例如 Foo
限定名稱Qualified name
名稱中含有命名空間分隔符的標識符,例如 Foo\Bar
完全限定名稱Fully qualified name
名稱中包含命名空間分隔符 , 并以命名空間分隔符開始的標識符 , 例如 \Foo\Bar 。namespace\Foo 也是一個完全限定名稱 。
4.2、名稱解析遵循下列規則
對完全限定名稱的函數,類和常量的調用在編譯時解析 。例如 new \A\B 解析為類 A\B 。
所有的非限定名稱和限定名稱(非完全限定名稱)根據當前的導入規則在編譯時進行轉換 。例如,如果命名空間 A\B\C 被導入為 C,那么對 C\D\e() 的調用就會被轉換為 A\B\C\D\e() 。
在命名空間內部,所有的沒有根據導入規則轉換的限定名稱均會在其前面加上當前的命名空間名稱 。例如,在命名空間 A\B 內部調用 C\D\e(),則 C\D\e() 會被轉換為 A\B\C\D\e()。
非限定類名根據當前的導入規則在編譯時轉換(用全名代替短的導入名稱) 。例如,如果命名空間 A\B\C 導入為C,則 new C() 被轉換為 new A\B\C()。
在命名空間內部(例如A\B),對非限定名稱的函數調用是在運行時解析的 。例如對函數 foo() 的調用是這樣解析的:
在當前命名空間中查找名為 A\B\foo() 的函數
嘗試查找并調用 全局(global) 空間中的函數 foo() 。
在命名空間(例如A\B)內部對非限定名稱或限定名稱類(非完全限定名稱)的調用是在運行時解析的 。下面是調用 new C() 及 new D\E() 的解析過程: new C()的解析:
在當前命名空間中查找A\B\C類 。
嘗試自動裝載類A\B\C 。
new D\E()的解析:
在類名稱前面加上當前命名空間名稱變成:A\B\D\E,然后查找該類 。
嘗試自動裝載類 A\B\D\E 。
為了引用全局命名空間中的全局類,必須使用完全限定名稱 new \C() 。
5、具體操作使用spl_autoload_register函數設置一個加載器
【php命名空間 php空間命名】使用關鍵字use 引入類到執行文件中