命名空間概述

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

什么是命名空間?從廣義上來(lái)說(shuō),命名空間是一種封裝事物的方法。在很多地方都可以見(jiàn)到這種抽象概念。例如,在操作系統(tǒng)中目錄用來(lái)將相關(guān)文件分組,對(duì)于目錄中的文件來(lái)說(shuō),它就扮演了命名空間的角色。具體舉個(gè)例子,文件 foo.txt 可以同時(shí)在目錄 /home/greg/home/other 中存在,但在同一個(gè)目錄中不能存在兩個(gè) foo.txt 文件。另外,在目錄 /home/greg 外訪問(wèn) foo.txt 文件時(shí),我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個(gè)原理應(yīng)用到程序設(shè)計(jì)領(lǐng)域就是命名空間的概念。

在 PHP 中,命名空間用來(lái)解決在編寫(xiě)類庫(kù)或應(yīng)用程序時(shí)創(chuàng)建可重用的代碼如類或函數(shù)時(shí)碰到的兩類問(wèn)題:

  1. 用戶編寫(xiě)的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突。
  2. 為很長(zhǎng)的標(biāo)識(shí)符名稱(通常是為了緩解第一類問(wèn)題而定義的)創(chuàng)建一個(gè)別名(或簡(jiǎn)短)的名稱,提高源代碼的可讀性。

PHP 命名空間提供了一種將相關(guān)的類、函數(shù)和常量組合到一起的途徑。下面是一個(gè)說(shuō)明 PHP 命名空間語(yǔ)法的示例:

示例 #1 命名空間語(yǔ)法示例

<?php
namespace my\name// 參考 "定義命名空間" 小節(jié)

class MyClass {}
function 
myfunction() {}
const 
MYCONST 1;

$a = new MyClass;
$c = new \my\name\MyClass// 參考 "全局空間" 小節(jié)

$a strlen('hi'); // 參考 "使用命名空間:后備全局函數(shù)/常量" 小節(jié)

$d = namespace\MYCONST// 參考 "namespace操作符和__NAMESPACE__常量” 小節(jié)

$d __NAMESPACE__ '\MYCONST';
echo 
constant($d); // 參考 "命名空間和動(dòng)態(tài)語(yǔ)言特征" 小節(jié)
?>

注意: 命名空間名稱大小寫(xiě)不敏感。

注意:

名為 PHP 的命名空間,以及以這些名字開(kāi)頭的命名空間 (例如 PHP\Classes)被保留用作語(yǔ)言內(nèi)核使用, 而不應(yīng)該在用戶空間的代碼中使用。