當前位置:學問君>人在職場>電腦培訓>

PHP中命名空間的方法

學問君 人氣:2.53W

【提要】本篇《PHP中命名空間的方法【1】》特別爲需要方法編程學習的朋友收集整理的,僅供參考。內容如下:

PHP中命名空間的方法

PHP獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。下面是小編爲大家搜尋整理的PHP中命名空間的方法,希望能給大家帶來幫助!更多精彩內容請及時關注我們考試網!

概述

PHP對於命名空間的支援,經歷了一段艱難的旅程。幸運的是,PHP從5.3開始引入了命名空間。自從PHP引入了命名空間,PHP代碼的適用結構也得到了大大的改善。許多編程語言早就有了命名空間的概念,相對於其他語言來說,PHP對於命名空間的支援,稍微有點晚了。不管如何,每一種新特性的引入都有其目的,和其他語言一樣,PHP引入命名空間也主要是爲了解決名字衝突的問題。

 命名空間(namespace)的概念

代碼如下:

當在字元串中使用命名空間名字的時候,一定不要忘了轉義

可以將命名空間想象成一個抽屜,你可以在抽屜裏放入鉛筆、尺子、A4紙等,這些都是你自己的私有物品。在你的抽屜下面是別人的抽屜,別人也可以在抽屜裏放入相同的物品。爲了不拿錯物品,你們決定在自己的抽屜上貼上標籤,這樣就可以清晰的看到某個物品是屬於誰的了。

之前,開發者必須在類、函數和常量中添加下劃線,用來使自己的代碼獨立其他於代碼庫。這相當於所有人都給自己的物品貼上標籤之後,一起放入了一個更大的抽屜裏。儘管這也是一種組織代碼的方式,但是這種方式是非常低效的。

命名空間的到來就是爲了解決這個問題。我們可以在不同的命名空間裏聲明相同的函數、類和常量,而不會造成名字上的衝突。本質上,命名空間無非是一種分等級標記PHP代碼的方式。

 正在使用命名空間

有一點需要注意的是,我們正在間接的使用命名空間。從PHP 5.3開始,所有在非用戶定義的命名空間中的聲明(類、函數、常量),都默認的屬於全局命名空間。

全局命名空間中包含了所有PHP內部的定義,如echo()、mysqli_connect()和Exception類。由於全局命名空間並沒有獨立的標識名,所以它經常被成爲全局空間(global space)。

定義命名空間

命名空間的定義必須是PHP檔案的第一條語句。唯一允許在定義命名空間之前使用的語句是declare語句。

定義命名空間很簡單,只需要使用關鍵字namespace即可。命名空間的名字需要遵循PHP檔案中其他標識符的命名規則。

下面是定義一個命名空間的示例:

代碼如下:

namespace MyNamespace{}

class Test{}

如果想定義一個屬於全局空間的代碼塊,也是使用namespace關鍵字,但是後面不加命名空間的名字,如下:

代碼如下:

namespace {}

class Test{}

我們甚至可以在一個檔案中定義多個命名空間,如下:

代碼如下:

namespace MyNamespace {}

namespace MySecondNamespace {}

namespace {}

我們也可以將一個命名空間分散在不同的檔案中,檔案包含的處理程序會自動合併他們。因此,限制大量的命名空間在同一個檔案中定義是一個很好的'編程實踐,就像我們通常單獨爲每個類定義一個單獨的檔案一樣。

複製代碼 代碼如下:

有一點需要注意的是,包含命名空間代碼塊的{是可選的,可以用也可以不用。事實上,只要我們堅持在一個檔案中只定義一個命名空間,那麼我們就可以完全省略{,這樣也可以使我們的代碼看起來更加簡潔。

 子命名空間

命名空間可以遵循一個特定的層級,就像我們電腦檔案系統中得目錄一樣。子命名空間對於將一個項目結構化尤其特別有用。例如,你的項目需要訪問數據庫,你可能會想將所有數據庫相關的代碼(如數據庫異常處理等)放在同一個子目錄下。

爲了保持靈活性,將子命名空間放在子目錄中是非常明智的做法。這會使你的代碼結構更清晰,而且會使遵循PSR-0標準的autoloaders的使用變得更容易。

PHP使用反斜線作爲命名空間的分隔符,有趣的是,PHP甚至考慮過使用笑臉:)作爲命名空間的分隔符。

子命名空間定義示例:

代碼如下:

namespace MyProjectDatabase

class Connection {}

可以使用盡可能多的子命名空間:

代碼如下:

namespace MyProjectBlogAuthHandlerSocial;

class Twitter {}

有一點需要注意的是,PHP並不支援命名空間的嵌套定義,下面的代碼會導致一個致命錯誤:Namespace declarations cannot be nested。

代碼如下:

namespace MyProject {}

namespace Database {}

class Connection { }

&nbsp

TAGS:PHP