首頁  >  文章  >  後端開發  >  PHP命名空間的詳解與應用

PHP命名空間的詳解與應用

*文
*文原創
2017-12-25 12:01:201996瀏覽

很多新手可能並不了解命名空間,也不知道如何套用命名空間。本文就來講述PHP的命名空間以其使用,希望對大家有幫助。

1. PHP中的命名空間是什麼?

什麼是命名空間? 「從廣義來說,命名空間是一種封裝事物的方法。在許多地方都可以看到這種抽象概念。例如,在作業系統中目錄用來將相關文件分組,對於目錄中的文件來說,它就扮演了命名空間的角色。 ,在目錄/home/greg 外存取foo.txt 檔案時,我們必須將目錄名稱以及目錄分隔符號放在檔案名稱之前得到/home/greg/foo.txt。概念。

從本質上講,命名空間就是一個容器,這個容器內我們可以放入類別、函數和變量,他們在同一命名空間內可以無條件地相互存取。在命名空間之外,就必須引用或匯入其他命名空間,才能呼叫它們所包含的這些項目。

命名空間跟shell中的檔案目錄的概念是一樣一樣的。在目前目錄下可以直接用文件名稱存取所有文件,如果需要存取其他目錄下的文件,就需要輸入相對路徑或絕對路徑。

引用方式:

namespace foo;
 class Foo {   
         public function foo()   
             {        
                  return \top\namespace\bar\Bar::fuck();    
              }
             }


匯入方式:

namespace foo; 
use top\namespace\bar\Bar; 
 class Foo {
        public function foo() 
            {        return Bar::fuck();  
            }
           }

匯入就相當於將目的類別複製一份到目前命名空間中。

3. PHP命名空間有何實際應用?

命名空間的存在是為了解決下面兩個問題:

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

2). 為很長的識別碼名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高原始程式碼的可讀性。

4. 一些tips

1. 同一個空間下的類別直接互相直接調用,屬於一家。例如 Laravel 中的 PageController 類別中可以直接寫 Page::all() 這樣的程式碼來呼叫 Page 這個model,因為他們兩個都在頂級命名空間下。

2. 若一個類別存在於非頂級命名空間中,那麼它只能在呼叫同樣是當前命名空間下的其他類別才不用“引用”或“導入”,它們屬於一家。任何子命名空間都是另一個命名空間,另一個容器,沒有除了容器之間關係之外的任何特殊關係。

3. Laravel 採用 classmap 方式進行自動載入(autoload),PHP雖然有了命名空間這個高階特性,但這只是邏輯關係,require 檔案還是要有的。這個類別和檔案的對應關係就存在 /vendor/composer/autoload_classmap.php ,每次 composer dump-autoload 都會重新編譯、產生。


相關推薦:

#PHP自動載入與命名空間的應用小結

PHP命名空間、性狀與生成器相關介紹

#2017新手學習框架必備:Thinkphp5框架教程之命名空間詳解

#

以上是PHP命名空間的詳解與應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn