php命名空間概念解析

來源:互聯網
上載者:User

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

  什麼是命名空間?“從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 檔案。另外,在目錄 /home/greg 外訪問 foo.txt 檔案時,我們必須將目錄名以及目錄分隔字元放在檔案名稱之前得到 /home/greg/foo.txt。這個原理應用到程式設計領域就是命名空間的概念。”——命名空間概述

  2. PHP命名空間該如何理解?

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

  命名空間跟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 都會重新編譯、產生。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.