很多語言都提供了名稱空間特性,包括 C++ 和 Java? 編程語言。引入名稱空間是為了幫助組織大型的代碼庫,因為在大型代碼庫中,應(yīng)用程序經(jīng)常會出現(xiàn)函數(shù)名或類名重疊問題,這會引起其他問題。使用名稱空間可以幫助識別代碼提供的函數(shù)或?qū)嵱贸绦?,甚至可以幫助指定其來源。一個例子就是 C# 中的 System 名稱空間,它包含有 .NET 框架提供的所有函數(shù)和類。
在其他未提供正式名稱空間的語言中(比如 PHP V5.2 以及更早版本),人們常常通過在類或函數(shù)名中使用特定的命名約定來發(fā)揮名稱空間的作用。比如 Zend Framework,其中每個類名以 Zend 開頭,并且每個子名稱空間使用下劃線分隔開。比如,類定義 Zend_Db_Table 表示 Zend Framework 中的一個類并且提供數(shù)據(jù)庫功能。這種方法的一個缺點就是產(chǎn)生的代碼非常繁瑣,尤其是那些包含好幾層的類或函數(shù)(Zend Framework 中的 Zend_Cache_Backend_Apc 就是一個例子)。另一個問題就是所有代碼必須遵循這種風(fēng)格,因此如果在應(yīng)用程序中集成了不遵循這種命名約定的第三方代碼后,問題就復(fù)雜了。
PHP 名稱空間的發(fā)展也并非一帆風(fēng)順。它們最初計劃引入到 PHP V5 中,但是由于無法獲得恰當(dāng)?shù)膶崿F(xiàn),因此在開發(fā)階段被放棄。最后決定將它們并入到 PHP V6 中,在 2007 年決定將所有 nonunicode 增強移到另一個 PHP V5.x 發(fā)行版后,名稱空間隨后被移入到 PHP V5.3 中。盡管自最初的設(shè)計之后絕大部分名稱空間行為沒有發(fā)生變化,但是使用哪一種操作符卻成了最大的問題,并且社區(qū)成員對這個問題有不同的看法。2008 年 10 月最終決定使用反斜杠作為操作符,從而解決了所有在語言設(shè)計和適用性方面使用各種其他操作符的問題。
PHP 名稱空間
PHP 從其他語言中借鑒了很多名稱空間的語法和設(shè)計 – 最突出的是 C++.然而,PHP 名稱空間在某些方面具有自己的獨特性,這對于希望像在其他語言中那樣使用名稱空間的用戶來說是一個挑戰(zhàn)。在本節(jié)中,我們將研究 PHP 名稱空間的工作方式。
定義一個名稱空間
定義一個新的名稱空間非常簡單。要定義新名稱空間,在一個文件中添加清單 1 中的代碼作為第一個命令或輸出。
清單 1. 定義名稱空間
1