首頁  >  文章  >  後端開發  >  PHP 命名空間 入門

PHP 命名空間 入門

WBOY
WBOY原創
2016-08-08 09:29:41905瀏覽

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

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

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

從本質上講,命名空間就是一個容器,這個容器內我們可以放入類、函數和我們可以放入類變量,他們在同一命名空間內可以無條件相互存取。的概念是一樣一樣的。

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();
    }
}
導入就相當於將目的類複製一份到當前命名空間中有何實際命名空間。

命名空間的存在是為了解決下面兩個問題:
1. 使用者所寫的程式碼與PHP內部的類別/函數/常數或第三方類別/函數/常數之間的名字衝突。

目前非常流行的Composer 就是一個基於命名空間的包管理器/依賴管理器,同樣,Laravel 能達到今天的成功,很大程度上也是因為PHP5.3的普及,生恰逢時。 https://packagist.org/ 上下載到各種 composer 包,類似於 yum、npm或gem。

4. 一些tips

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


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

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

轉自:http://lvwenhan.com/php/401.html 以上就介紹了PHP 命名空間 入門,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

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