命名空間 - PHP手冊筆記

來源:互聯網
上載者:User
概述

命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念,比如在作業系統中,目錄用來將相關檔案分組,對於目錄中的檔案來說,目錄就扮演了命名空間的角色。這個原理應用到程式設計領域就是命名空間的概念。PHP 5.3後的版本開始支援命名空間。

定義命名空間

命名空間通過關鍵字namespace來聲明。任何合法的PHP代碼都可以包含在命名空間中,但只有類、函數和常量這三種類型受命名空間的影響。

在聲明命名空間之前唯一合法的代碼是用於定義源檔案編碼方式的declare語句。命名空間必須是程式指令碼的第一條語句,所有非 PHP 程式碼封裝括空白符都不能出現在命名空間的聲明之前。同一個命名空間可以定義在多個檔案中。

定義子命名空間

與目錄和檔案的關係相似,PHP也允許指定層次化的命名空間。

在同一個檔案中定義多個命名空間

PHP支援這種文法,但不提倡使用。在同一個檔案中定義多個命名空間有兩種文法形式:一種是簡單的上下羅列,一種是使用大括弧形式的文法。建議使用第二種。

將全域的非命名空間中的代碼與命名空間中的程式碼群組合在一起,只能使用大括弧形式的文法。

使用命名空間:基礎

要使用命名空間,必須瞭解PHP是如何知道要使用哪一個命名空間中的元素的。

在檔案系統中,訪問一個檔案有三種方式:

  • 相對檔案名稱形式
  • 相對路徑名形式
  • 絕對路徑名形式

與檔案系統相似,在PHP命名空間中,類名可以通過三種方式引用,需要瞭解一下命名空間名稱定義:

  • 非限定名稱,不包含首碼的類名稱。名稱中不包含命名空間分隔字元的標識符。例如Foo。
  • 限定名稱,包含首碼的名稱,名稱中含有命名空間分隔字元的標識符。例如Foo\Bar。
  • 完全限定名稱,包含了全域首碼操作符的名稱。名稱中包含命名空間分隔字元,並一命名空間分隔字元開始的標識符。例如\Foo\Bar。namespace\Foo也是一個完全限定名稱。

命名空間和動態語言特徵

命名空間的實現受到語言自身的動態特徵的影響,有時必須使用完全限定名稱。

namespace關鍵字和__NAMESPACE__常量

常量__NAMESPACE__的值是包含當前命名空間名稱的字串。在全域的,不包括在任何命名空間中的代碼,它包含一個空的字串。常量__NAMESPACE__在動態建立名稱時很有用。

關鍵字namespace可用來顯式訪問當前命名空間或子命名空間中的元素。它等價於類中的self操作符。

使用命名空間:別名/匯入

允許通過別名引用或匯入外部的完全限定名稱,類似於在類unix檔案系統中可以建立對其它的檔案或目錄的符號串連。

PHP命名空間支援兩種別名或匯入方式:

  • 為類名稱使用別名
  • 為命名空間名稱使用別名

使用use操作符匯入或使用別名,支援一行包含多個use語句。注意對命名空間中的名稱,前置的反斜線是不必要的也不允許有反斜線,因為匯入的名稱必須是完整,不會根據當前的命名空間作相對解析。

全域空間

若未定義任何命名空間,所有的類與函數的定義都是在全域空間。在名稱前加上首碼\,表示該名稱是全域空間中的名稱。

使用命名空間:後備全域函數/常量

在命名空間中,當PHP遇到一個非限定的類、函數或常量名稱時,將會使用不同的有線策略來解析該名稱。

類名稱總是解析到當前命名空間中的名稱,因此在訪問系統內部或不包含在命名空間中的類名稱時,必須使用完全限定名稱。

對於函數和常量來說,如果當前命名空間中不存在該函數或常量,PHP 會退而使用全域空間中的函數或常量。

名稱解析規則

名稱解析規則文字挺多的,需要具體問題具體分析。

(全文完)

以上就介紹了命名空間 - PHP手冊筆記,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.