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將XML轉為數組的方法
本文詳細介紹了,在php編程中,將XML數據轉換為數組的詳細過程,剖析了xml轉為php數組的具體方法,感興趣的朋友可以參考學習下。PHPXML轉數組首先,得到一個xml型的對象:複製代碼代碼示例:$resp=$this->c->execute($req,$sessionKey);//獲得xml對象$items=$resp->items;...
-
用PHP實現文件上傳二法
PHP(HypertextPreprocessor)是一種HTML內嵌式的語言(類似IIS上的ASP)。而PHP獨特的語法混合了C、Java、Perl以及PHP式的新語法。它可以比CGI或者Perl更快速的執行動態網頁。除此之外,用PHP寫出來的Web後端CGI程序,可以很輕易的移植到不同的系統平台上。我們在做...
-
PHP如何使用curl發送GET和POST請求
導語:PHP如何使用curl發送GET和POST請求,具體詳情請閲讀下面代碼,更多詳情請關注應屆畢業生考試網。使用CURL發送請求的基本流程使用CURL的PHP擴展完成一個HTTP請求的發送一般有以下幾個步驟:1.初始化連接句柄;2.設置CURL選項;3.執行並獲取結果;4.釋放VURL連接句柄。...
-
PHP常用開發技巧
PHP開發常用技巧能使你在開發過程中快而有效.以下就是小編精心推薦PHP常用開發技巧,希望對大家有幫助!1使用dowhile避免多層if語句嵌套我們直接舉例説明:實現方式①if($name=='hedong'){if($sex=='male'){if($major=='PHP'){$ret='...