概述
命名空間是一種封裝事物的方法。在很多地方都可以看到這種抽象概念,例如在作業系統中,目錄用來將相關檔案分組,對於目錄中的檔案來說,目錄就扮演了命名空間的角色。這個原理應用在程式設計領域就是命名空間的概念。 PHP 5.3後的版本開始支援命名空間。
定義命名空間
命名空間透過關鍵字namespace
來聲明。任何合法的PHP程式碼都可以包含在命名空間中,但只有類別、函數和常數這三種類型受命名空間的影響。
在聲明命名空間之前唯一合法的程式碼是用來定義原始檔案編碼方式的declare
語句。命名空間必須是程式腳本的第一個語句,所有非 PHP 程式碼包含空白符都不能出現在命名空間的宣告之前。同一個命名空間可以定義在多個檔案中。
定義子命名空間
與目錄和檔案的關係相似,PHP也允許指定層次化的命名空間。
在同一個檔案中定義多個命名空間
PHP支援這種語法,但不提倡使用。在同一個檔案中定義多個命名空間有兩種語法形式:一種是簡單的上下羅列,一種是使用大括號形式的語法。建議使用第二種。
<code><?php declare(encoding = 'UTF-8'); namespace MyProject { /* MyProject */ } namespace { /* global */ }</code>
將全域的非命名空間中的程式碼與命名空間中的程式碼組合在一起,只能使用大括號形式的語法。
使用命名空間:基礎
要使用命名空間,必須了解PHP是如何知道要使用哪一個命名空間中的元素的。
在檔案系統中,存取一個檔案有三種方式:
與檔案系統相似,在PHP命名空間中,類別名稱可以透過三種方式引用,需要了解命名空間名稱定義:
Foo
。 FooBar
。 FooBar
。 namespaceFoo
也是一個完全限定名稱。 命名空間與動態語言特徵
命名空間的實現受到語言本身的動態特徵的影響,有時必須使用完全限定名稱。
namespace
關鍵字與__NAMESPACE__
常數
常數__NAMESPACE__的值是包含目前命名空間名稱的字串。在全域的,不包括在任何命名空間中的程式碼,它包含一個空的字串。常數__NAMESPACE__
在動態建立名稱時很有用。
關鍵字namespace
可用來明確存取目前命名空間或子命名空間中的元素。它等價於類別中的self
操作符。
使用命名空間:別名/導入
允許透過別名引用或匯入外部的完全限定名稱,類似於在類別unix檔案系統中可以建立對其它的檔案或目錄的符號連接。
PHP命名空間支援兩種別名或導入方式:
使用use
操作符匯入或使用別名,支援一行包含多個use
語句。注意對命名空間中的名稱,前導的反斜杠是不必要的也不允許有反斜杠,因為導入的名稱必須是完全限定的,不會根據當前的命名空間進行相對解析。
全局空間
若未定義任何命名空間,所有的類別與函數的定義都是在全域空間。在名稱前加上前綴,表示該名稱是全域空間中的名稱。
使用命名空間:後備全域函數/常數
在命名空間中,當PHP遇到非限定的類別、函數或常數名稱時,將會使用不同的有線策略來解析該名稱。
類別名稱總是解析到目前命名空間中的名稱,因此在存取系統內部或不包含在命名空間中的類別名稱時,必須使用完全限定名稱。
對於函數和常數來說,如果目前命名空間中不存在該函數或常數,PHP 會退而使用全域空間中的函數或常數。
名稱解析規則
名稱解析規則文字挺多的,需要具體問題具體分析。
(全文完)
以上就介紹了命名空間 - PHP手冊筆記,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。