糯米文學吧

位置:首頁 > 計算機 > php語言

PHP關鍵特性之命名空間實例

php語言2.15W

命名空間主要是為了解決代碼中類和函數可能存在衝突的問題。這篇文章給大家介紹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

標籤:PHP 實例