PHP 命名空間(namespace)


1 命名空間綜述

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

1.1 爲何要使用命名空間?

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

以函數爲例,演示以下:框架

1.1.1 不使用命名空間:函數

image

image

image

運行結果:編碼

image

1.1.2 使用命名空間:spa

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

image

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

image

1.2 使用命名空間 優點

簡單的說,就是解決代碼衝突。具體以下:開發

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

2 定義命名空間

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

  • 在定義的命名空間以前不能有任何輸出。如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 別名)。

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

相關文章
相關標籤/搜索