從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作係統中目錄用來將相關文件分組,對於目錄中的文件來說,它就扮演了命名空間的角色。具體舉個例子,文件 foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。另外,在目錄 /home/greg 外訪問 foo.txt 文件時,我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個原理應用到程序設計領域就是命名空間的概念。
在PHP中,命名空間用來解決在編寫類庫或應用程序時創建可重用的代碼如類或函數時碰到的兩類問題: 在PHP的世界裡,命名空間被設計為解決創建可重用的代碼元素,如類或函數時庫和應用程序的作者遇到兩個問題:
- 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。
- 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個彆名(或簡短)的名稱,提高源代碼的可讀性。
PHP 命名空間提供了一種將相關的類、函數和常量組合到一起的途徑。下麵是一個說明 PHP 命名空間語法的示例:
Example #1 命名空間語法示例
<?php namespace my\name; // 參考 "定義命名空間" 小節 class MyClass {} function myfunction() {} const MYCONST = 1; $a = new MyClass; $c = new \my\name\MyClass; // 參考 "全局空間" 小節 $a = strlen('hi'); // 參考 "使用命名空間:後備全局函數/常量" 小節 $d = namespace\MYCONST; // 參考 "namespace操作符和__NAMESPACE__常量” 小節 $d = __NAMESPACE__ . '\MYCONST'; echo constant($d); // 參考 "命名空間和動態語言特征" 小節 ?>
PHP 在 5.3.0 以後的版本開始支持命名空間。