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

PHP命名空間

巴扎黑
巴扎黑原創
2016-11-11 09:57:411022瀏覽

命名空間用來解決在編寫類別庫或應用程式時創建可重複使用的程式碼如類別或函數時碰到的兩類問題。

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

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

1、定義命名空間

使用namespace關鍵字定義命名空間,並使用反斜線」」作為分隔符號。

如:

namespace mytest;

namespace mytestspacex;

namespace mytest2spacexxxxx;

2、使用命名空間

use Myxx P命名空間動態特性

在use指令後面不能使用變數或常數。

呼叫類別時,類別名稱及類別名稱前的命名空間可以是變數構成。

namespace np1np2;

class Cls{

    public static function test() {

     public function test2(){

        print "test namespace 2n ";

    }

}

namespace B;

np1np2Cls::test();

//np1np2Cls::test(); //錯誤,這裡是呼叫Bnp12Cls::test(); = "\np1\np2\Cls";

$cls::test();

$obj = new $cls();

$obj->test2();

4、名稱解析遵循下列規則:

1、對完全限定名稱的函數,類別和常數的呼叫在編譯時解析。例如 new AB 解析為類別 AB。

2、所有的非限定名稱和限定名稱(非完全限定名稱)根據目前的導入規則在編譯時進行轉換。例如,如果命名空間 ABC 被導入為 C,那麼對 CDe() 的呼喚就會轉換為 ABCDe()。

3、在命名空間內部,所有的沒有根據導入規則轉換的限定名稱均會在其前面加上目前的命名空間名稱。例如,在命名空間 AB 內部呼叫 CDe(),則 CDe() 會轉換為 ABCDe() 。

4、非限定類別名稱根據目前的導入規則在編譯時轉換(以全名取代短的導入名稱)。例如,如果命名空間 ABC 導入為C,則 new C() 轉換為 new ABC() 。

5、在命名空間內部(例如AB),對非限定名稱的函數呼叫是在運行時解析的。例如對函數 foo() 的呼叫是這樣解析的:

1)在目前命名空間中尋找名為 ABfoo() 的函數

2)嘗試找出並呼叫全域(global) 空間中的函數 foo()。

6、在命名空間(例如AB)內部對非限定名稱或限定名稱類別(非完全限定名稱)的呼叫是在執行時解析的。以下是呼叫 new C() 及 new DE() 的解析過程: new C()的解​​析:

1)在目前命名空間中尋找ABC類別。

2)嘗試自動裝載類ABC。

new DE()的解析:

1)在類別名稱前面加上目前命名空間名稱變成:ABDE,然後找出該類別。

2)嘗試自動裝載類 ABDE。

為了引用全域命名空間中的全域類,必須使用完全限定名稱 new C()。

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