PHP 命名空間(namespace)



1 命名空間綜述

在C#和Java中都有命名空間的概念,而在PHP中,命名空間在PHP 5.3版本中首次加入的,以前的版本沒有這個功能。

1.1 為什么要使用命名空間?

做項目時,一個文件可能會引入多個文件。如果不使用命名空間,引入的多個文件中可能存在同名的類、函數、常量,就會報錯(重復定義的錯誤)。

以函數為例,演示如下:

1.1.1 不使用命名空間:

image

image

image

運行結果:

image

1.1.2 使用命名空間:

只在上述代碼中修改b.php文件,如下:

image

再次訪問,則不會報錯,運行結果:

image

1.2 使用命名空間 優勢

簡單的說,就是解決代碼沖突。具體如下:

  • 使用框架、第三方類庫,可以避免的類、函數、常量的沖突。
  • 可以分工協作,有利於多人同時開發一個項目,提高開發效率。

2 定義命名空間

如上1.1.2所示,一旦namespace聲明了命名空間,后面的代碼都屬於該空間。

  • 在定義的命名空間之前不能有任何輸出。如html代碼等。
  • 在聲明命名空間之前唯一合法的代碼是用於定義源文件編碼方式的 declare 語句,如:declare(encoding='UTF-8');
  • 項目中,只在一個php文件的開頭進行定義命名空間,並且只定義一個。
  • 通常該命名空間要遵循PSR-0命名規范(命名空間和目錄結構保持一致)。

3 空間分類

分為兩類:全局空間 和 命名空間

3.1 全局空間

不在namespace聲明的空間里面的代碼都屬於全局空間。

3.2 命名空間

如:namespace Think;

如:namespace Think\Controller; 這種反斜線分割的、層次化的,就是子命名空間。

如果需要在命名空間使用全局空間的類、函數、常量,在調用時,需要加上反斜線(代表全局空間)。

4 命名空間的使用

4.1使用限定名稱、非限定名稱訪問

  • 非限定名稱:  訪問當前命名空間。(在當前文件中直接使用)
  • 限定名稱:     類似於相對路徑,訪問當前空間下的子命名空間,如:new People\Person();
  • 完全限定名稱:類似於絕對路徑,訪問全局空間,如:new \Person();實例化全局空間下的Person類

4.2 導入 命名空間,然后直接使用

語法:use 命名空間,可以起別名(as 別名)。

目的:在當前文件中使用其他命名空間的 類、函數、常量。(使用時,就不用加上限定名稱)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM