當前位置:才華齋>計算機>php語言>

PHP關鍵特性之名稱空間例項

php語言 閱讀(2.18W)

名稱空間主要是為了解決程式碼中類和函式可能存在衝突的問題。這篇文章給大家介紹php關鍵特性之名稱空間,包括名稱空間的定義等知識點,需要的朋友參考下吧.

PHP關鍵特性之名稱空間例項

名稱空間主要是為了解決程式碼中類和函式可能存在衝突的問題,而這個特性其他語言一早就有,PHP則是姍姍來遲,它的出現催生了 PSR-4 的誕生,從而也催生了 Composer 的興起,所以是非常重要的特性。

  名稱空間的定義

名稱空間是一個容器,這個容器主要是為了識別其下的類和函式。一旦定義了名稱空間,它下面的程式碼就屬於這個名稱空間了,所以名稱空間的定義要在程式碼的最開始行。

對於同一個包來說,同一個名稱空間或者子名稱空間的程式碼沒有必要在一個 PHP 檔案中定義,子名稱空間下的程式碼是為了完成特定模組的工作,組合起來就是一個包完整的名稱空間。

假如編寫的程式碼沒有定義名稱空間,那說明它屬於全域性的名稱空間( 符號),所以能夠直接引用類或者函式(不用新增 符號)。

引用名稱空間識別符號的三種方式

(1)Fully-qualified name

類似於作業系統上的絕對路徑,而且是完整的路徑,所以在理解的時候不會有誤解。

比如在 new ABC ,那麼 C 就被會解析到 AB 名稱空間下的 C 類。

(2)Qualified name

類似於作業系統上的相對路徑,它包含部分名字並被引用到當前的名稱空間。

比如 BC() 在名稱空間 A 下呼叫,則最終引用的名稱空間就是 ABC()。

(3)Unqualified name

類似於Qualified name,但是沒包括子名稱空間。

比如 C() 在名稱空間 AB 下呼叫,則最終引用的名稱空間就是 ABC()。

通過一個例子來說明三種引用方式:

?

1

2

3

4

5

6

7

8

9

10

11

12

namespace Example;

require_once "";

class ClassA {}

function Function() {}

//完全限定名稱

ExampleFunction();

ExampleBFunction();

//限定名稱

BFunction(); //指向 ExampleBFunction();

//非限定名稱

$test = new ClassA(); //resolves to ExampleClassA

Function(); //指向 ExampleFunction

注意:

?Inside a namespace,假如在 current scope 沒有發現函式和常量的定義,PHP 不會報錯。而是去全域性名稱空間中尋找。

?Inside a namespace,假如在 current scope 沒有發現類的定義,則 PHP 會直接報錯,不會去全域性域中找對應的類,所以假如你需要引用一個 internal 或使用者自定義的類,必須使用完全限定名稱。

先舉個簡單的例子,首先編寫一段程式碼(定義在名稱空間下),命名為 :

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17