偷盜者 php 命名空間

2021-06-26 09:32:11 字數 2954 閱讀 2779

在討論如何使用命名空間之前,必須了解 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。

下面是乙個使用這三種方式的例項:

file1.php

<?php

namespace 

foo\

bar\

subnamespace

;const 

foo = 1

;function 

foo() {}

class 

foo}

?>

file2.php

<?php

namespace 

foo\

bar;

include 

'file1.php'

;const 

foo = 2

;function 

foo() {}

class 

foo}

/* 非限定名稱 */

foo(); 

// 解析為 foo\bar\foo resolves to function foo\bar\foo

foo::

staticmethod

(); 

// 解析為類 foo\bar\foo的靜態方法staticmethod。resolves to class foo\bar\foo, method staticmethod

echo 

foo; 

// resolves to constant foo\bar\foo

/* 限定名稱 */

subnamespace

\foo

(); 

// 解析為函式 foo\bar\subnamespace\foo

subnamespace

\foo

::staticmethod

(); 

// 解析為類 foo\bar\subnamespace\foo,

// 以及類的方法 staticmethod

echo 

subnamespace

\foo

; // 解析為常量 foo\bar\subnamespace\foo

/* 完全限定名稱 */

\foo

\bar

\foo

(); 

// 解析為函式 foo\bar\foo

\foo

\bar

\foo

::staticmethod

(); 

// 解析為類 foo\bar\foo, 以及類的方法 staticmethod

echo \

foo\

bar\

foo; 

// 解析為常量 foo\bar\foo

?>

注意訪問任意全域性類、函式或常量,都可以使用完全限定名稱,例如\strlen()或 \exception 或 \ini_all。

example #1 在命名空間內部訪問全域性類、函式和常量

<?php

namespace 

foo;

function 

strlen

() {}

const 

ini_all = 3

;class 

exception 

{}$a 

= \strlen

('hi'

); // 呼叫全域性函式strlen

$b = \

ini_all

; // 訪問全域性常量 ini_all

$c = new \

exception

('error'

); // 例項化全域性類 exception

?>

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

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

php命名空間

namespace misszhou function var dump a 1 var dump var dump 1 表示呼叫全域性 解決常量的衝突問題 有點像子目錄的概念 namespace meizi 必須放第一行 include func.inc.php function one func...

php 命名空間

使用命名空間 別名 匯入,允許通過別名引用或匯入外部的完全限定名稱,是命名空間的乙個重要特徵。這有點類似於在類 unix 檔案系統中可以建立對其它的檔案或目錄的符號連線。所有支援命名空間的php版本支援三種別名或匯入方式 為類名稱使用別名 為介面使用別名或為命名空間名稱使用別名。php 5.6開始允...