php命名空間的基本使用

2021-08-02 03:13:02 字數 3860 閱讀 3073

1.命名空間概述。

1.1什麼是命名空間?

從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到

這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它

就扮演了命名空間的角色。具體舉個例子,檔案.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同乙個目錄中不能存在兩》個 foo.txt 檔案。另外,在目錄 /home/greg 外訪問 foo.txt 檔案時,我們必須將目錄名

以及目錄分隔符放在檔名之前得到/home/greg/foo.txt。這個原理應用到程式設計領域就

是命名空間的概念。

1.2命名空間的作用

在php中,命名空間用來解決在編寫類庫或應用程式時建立可重用的**如類或函式時碰到的兩類問題:

1. 使用者編寫的**與php內部的類/函式/常量或第三方類/函式/常量之間的名字衝突。

2. 為很長的識別符號名稱(通常是為了緩解第一類問題而定義的)建立乙個別名(或簡短)>的名稱,提高源**的可讀性。

php 命名空間提供了一種將相關的類、函式和常量組合到一起的途徑

2.命名空間的定義。

2.1 命名空間作用範圍:

任意合法的php**都可以包含在命名空間中,但只有以下型別的**受命名空間的影響,它們是:類(包括抽象類和traits)、介面、函式和常量。

2.2 命名空間定義規則

在宣告命名空間之前唯一合法的**是用於定義原始檔編碼方式的 

declare

語句。另外,所有非 php **包括空白符都不能出現在命名空間的宣告之前,同乙個命名空間可以定義在多個檔案中,即允許將同乙個命名空間的內容分割存放在不同的檔案中。

2.3 命名空間使用案例

<?php

namespace 

myproject;

const 

connect_ok = 1

; class 

connection 

function 

connect

() 

?>

2.4 定義子命名空間

與目錄和檔案的關係很象,php 命名空間也允許指定層次化的命名空間的名稱。因此,命名空間的名字可以使用分層次的方式定義。

3.命名空間的使用。

在討論如何使用命名空間之前,必須了解 php 是如何知道要使用哪乙個命名空間中的元素的。可以將 php 命名空間與檔案系統作乙個簡單的模擬。在檔案系統中訪問乙個檔案有三種方式:

相對檔名形式如

foo.txt

。它會被解析為 

currentdirectory/foo.txt

,其中 currentdirectory 表示當前目錄。因此如果當前目錄是 

/home/foo

,則該檔名被解析為

/home/foo/foo.txt

。相對路徑名形式如

subdirectory/foo.txt

。它會被解析為 

currentdirectory/subdirectory/foo.txt

。絕對路徑名形式如

/main/foo.txt

。它會被解析為

/main/foo.txt

。php 命名空間中的元素使用同樣的原理。例如,類名可以通過三種方式引用:

非限定名稱,或不包含字首的類名稱,例如 

$a=new foo();

或 foo::staticmethod();

。如果當前命名空間是

currentnamespace

,foo 將被解析為 

currentnamespace\foo

。如果使用 foo 的**是全域性的,不包含在任何命名空間中的**,則 foo 會被解析為

foo。 警告:如果命名空間中的函式或常量未定義,則該非限定的函式名稱或常量名稱會被解析為全域性函式名稱或常量名稱。詳情參見 

使用命名空間:後備全域性函式名稱/常量名稱

。限定名稱,或包含字首的名稱,例如 

$a = new subnamespace\foo();

或 subnamespace\foo::staticmethod();

。如果當前的命名空間是 

currentnamespace

,則 foo 會被解析為 

currentnamespace\subnamespace\foo

。如果使用 foo 的**是全域性的,不包含在任何命名空間中的**,foo 會被解析為

subnamespace\foo

。完全限定名稱,或包含了全域性字首操作符的名稱,例如, 

$a = new \currentnamespace\foo();

或\currentnamespace\foo::staticmethod();

。在這種情況下,foo 總是被解析為**中的文字名(literal name)

currentnamespace\foo

。4.命名空間的匯入。

允許通過別名引用或匯入外部的完全限定名稱,是命名空間的乙個重要特徵。這有點類似於在類 unix 檔案系統中可以建立對其它的檔案或目錄的符號連線。

所有支援命名空間的php版本支援三種別名或匯入方式:為類名稱使用別名、為介面使用別名或為命名空間名稱使用別名。php 5.6開始允許匯入函式或常量或者為它們設定別名。

<?php

namespace 

foo;

use my\

full

\classname 

as another;

// 下面的例子與 use my\full\nsname as nsname 相同

use my\

full

\nsname;

// 匯入乙個全域性類

use 

arrayobject;

// importing a function (php 5.6+)

use function my\

full

\functionname;

// aliasing a function (php 5.6+)

use function my\

full

\functionname 

as func;

// importing a constant (php 5.6+)

use const my\

full

\constant;

$obj 

= new namespace\

another

; // 例項化 foo\another 物件

$obj 

= new 

another

; // 例項化 my\full\classname 物件

nsname

\subns

\func

(); 

// 呼叫函式 my\full\nsname\subns\func

$a = new 

arrayobject

(array(

1)); 

// 例項化 arrayobject 物件

// 如果不使用 "use \arrayobject" ,則例項化乙個 foo\arrayobject 物件

func

(); 

// calls function my\full\functionname

echo 

constant

; // echoes the value of my\full\constant

?>

php 命名空間,PHP使用命名空間

介紹 命名空間中的類,函式或常量可以通過以下方式使用 在當前命名空間中使用類 指定相對於當前命名空間的命名空間 提供命名空間的全限定名稱 從當前命名空間 在此示例中,從test1.php載入了命名空間。沒有命名空間引用的函式或類名稱將訪問當前命名空間中的功能或類名稱 示例 test1.php nam...

PHP的命名空間

php的命名空間 namespace 是php5.3之後才有的。這個概念在c 中已經很早就有了,php中的namespace其實和c 的概念是一樣的。假設如果不使用namespace,那麼每個類在乙個專案中的名字就必須是固定的。因為php在new的時候不管是呼叫autoload還是呼叫已載入過的類,...

php的命名空間

允許通過別名引用或匯入外部的完全限定名稱,是命名空間的乙個重要特徵。這有點類似於在類 unix 檔案系統中可以建立對其它的檔案或目錄的符號連線。php 命名空間支援 有兩種使用別名或匯入方式 為類名稱使用別名,或為命名空間名稱使用別名。注意php不支援匯入函式或常量。useexample 1 使用u...