国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP教程-PHP代碼中的名稱空間

2020-03-24 19:09:59
字體:
供稿:網(wǎng)友
在 PHP V5.3 中引入的名稱空間是為 PHP 類、常量和函數(shù)提供上下文的一種方式,從而可以將使用相同名稱的元素看作是惟一的。惟一的名稱避免了命名沖突,當(dāng)兩個(gè)類或函數(shù)使用相同的名稱時(shí)就會(huì)發(fā)生這種情況。有時(shí)這些 PHP 類表示現(xiàn)實(shí)世界中的相同對(duì)象,但它們的行為是完全不同的。名稱空間能夠確保您擁有正確的 PHP 類、常量或函數(shù),并且要使用您的 PHP 類的人能夠確保他們使用了正確的類。代碼中的名稱空間就像現(xiàn)實(shí)世界中的上下文??紤]一個(gè)表示現(xiàn)實(shí)世界中的汽車對(duì)象的類。例如,通過 Internet 銷售汽車的公司使用的 Automobile 類的行為可能與保險(xiǎn)銷售公司使用的 Automobile 類完全不同。作為html' target='_blank'>應(yīng)用程序開發(fā)人員,您可能使用其他人編寫的組件。您不能保證其他人永遠(yuǎn)不使用您已經(jīng)使用的類名,但這些類的行為卻大相徑庭。在出現(xiàn)名稱空間之前,PHP 開發(fā)人員通常將上下文構(gòu)建到類名中,例如 My_Enterprise_Person 或 XML_Validator。清單 1 顯示了一個(gè)位于名稱空間中的類。
清單 1. 在名稱空間中聲明類

下面給出了一個(gè)例子,展示了如何在名稱空間中引用類。
清單 2. 在名稱空間中引用類

在向所有類添加名稱空間之前定義一個(gè)名稱空間策略是個(gè)不錯(cuò)的主意。盡管在某種程度上也可以不斷地構(gòu)建名稱空間,但最好為名稱空間確定一個(gè)通用結(jié)構(gòu),以方便名稱空間的組織,并減少以后可能需要的修改。只要正確使用,除了提供上下文之外,名稱空間還可以用來組織 PHP 代碼。其他語言(比如 Java 和 C#)在很久以前就使用名稱空間。在選擇名稱空間命名方式上,我使用的約定類似于這些語言的約定,因?yàn)樵S多開發(fā)人員都對(duì)此比較熟悉,便于他們理解。不過,與 Java 語言不同的是,PHP 中的名稱空間與類所在的目錄之間沒有聯(lián)系。您可以給類、函數(shù)或常量選擇任意的名稱空間。您甚至可以對(duì)一個(gè)文件使用多個(gè)名稱空間。同時(shí),PHP 名稱空間也不同于 C#,您可以對(duì)類以外的函數(shù)或常量使用名稱空間。頂級(jí)名稱空間如果您為某個(gè)組織構(gòu)建名稱空間,您可以使用組織名作為頂級(jí)域。一般情況下,使用組織名稱創(chuàng)建頂級(jí)名稱空間已經(jīng)足以為 PHP 代碼提供上下文,以及避免命名沖突,除非該組織編寫大量用途不一的應(yīng)用程序。清單 3 的示例顯示了如何聲明頂級(jí)名稱空間。
清單 3. 頂級(jí)名稱空間

次級(jí)名稱空間次級(jí)名稱空間 是頂級(jí)名稱空間內(nèi)部的名稱空間。當(dāng)頂級(jí)名稱空間還不足以為 PHP 類建立上下文時(shí),它們提供進(jìn)一步說明。在創(chuàng)建次級(jí)名稱空間時(shí),不要憑一時(shí)的興趣而過多地創(chuàng)建,這很重要。隨著次級(jí)名稱空間的增多,組織和引用它們就會(huì)變得越來越困難。如果您希望名稱空間發(fā)揮雙重作用,即避免命名沖突和組織 PHP 代碼,那么就要更加注意這點(diǎn)了。在決定為了方便組織代碼應(yīng)該向另一個(gè)名稱空間引入多少個(gè)次級(jí)名稱空間時(shí),我嘗試將該數(shù)量限制為 7 個(gè)(上下浮動(dòng)不超過 2),以利用數(shù)字 7 更加容易記住這個(gè)優(yōu)勢(shì)。這并不總是奏效的,但我將它作為一個(gè)指導(dǎo)原則,以確保不將名稱空間劃分為過多的次級(jí)名稱空間。清單 4 的示例顯示了在頂級(jí)名稱空間中聲明次級(jí)名稱空間。
清單 4. 次級(jí)名稱空間

反斜杠(/)將次級(jí)名稱空間 developerWorks 與頂級(jí)名稱空間 IBM 分開。在聲明次級(jí)名稱空間時(shí),您可以使用兩個(gè)常見技巧,或同時(shí)使用它們。獲取名稱空間的常見地方是項(xiàng)目名或應(yīng)用程序名;另一個(gè)地方是域名。通過項(xiàng)目定義如果您使用組織名作為頂級(jí)名稱空間,并且想通過次級(jí)名稱空間來進(jìn)一步提供上下文,那么可以使用項(xiàng)目名或應(yīng)用程序名作為次級(jí)名稱空間。例如,如果您構(gòu)建一個(gè)稱為 Greeter 的新應(yīng)用程序(用于獲取用戶的名稱并問候他們),那么清單 5 中的名稱空間將為稱為 Prompt 的類提供完整的上下文。
清單 5. 使用應(yīng)用程序名作為次級(jí)名稱空間


?php
namespace IBM/Greeter;
class Prompt {
...
}
?

由于 Prompt 可能是多個(gè)應(yīng)用程序或庫的類名,所以為該名稱空間添加組織名和項(xiàng)目名能夠讓這個(gè) Prompt 類與其他同名的類區(qū)分開來。通過域定義使用域名是另一種選擇次級(jí)名稱空間的常見方式,如 清單 6 所示。它也可以用于項(xiàng)目名之后,是否使用取決于您對(duì)可重用性的計(jì)劃(見 根據(jù)可重用性命名 )。域 是對(duì)更大的問題域的一組分類。域的一個(gè)例子是在更大型的應(yīng)用程序中處理帳戶、客戶和產(chǎn)品的 Account 、 Customers 或 Products 。
清單 6. 使用域作為次級(jí)名稱空間


?php
namespace IBM/MyApp/Account;
class Address {
...
}
?

根據(jù)可重用性命名除了應(yīng)用支持可重用性的模塊概念之外,類和名稱空間的命名方式也能夠?qū)崿F(xiàn)可重用性。有時(shí)不良的命名方式會(huì)損害可重用性,因?yàn)椴患训拿Q暗示著類僅能用于特定目的。同樣,錯(cuò)誤地應(yīng)用名稱空間可能會(huì)不必要地局限類的使用范圍,讓它們的重用變得困難。在使用組織名的頂級(jí)名稱空間中,應(yīng)該保留 Common 、 Core 、 Lib 等可跨應(yīng)用程序重用的名稱空間。一個(gè)常見的例子是驗(yàn)證,其中針對(duì)整個(gè)企業(yè)的庫存單位(SKU)、帳號(hào)或發(fā)票號(hào)的規(guī)則是一樣的,從而獲得合適的規(guī)則和長(zhǎng)度。對(duì)于 Validator 類,類似清單 7 的名稱空間是不錯(cuò)的選擇。
清單 7. 使用通用的 validation 名稱空間


?php
namespace MyCompany/Common/Validation;
class NotNullValidator {
...
}
?

在這里,組織名用作頂級(jí)域( MyCompany )。 Common 名稱空間用作項(xiàng)目。即使在編寫這個(gè)類的同時(shí)也許正在編寫一個(gè)特定的應(yīng)用程序,該類一樣可以在組織的任何項(xiàng)目中使用。最后, Validation 用作類的域。
使用別名盡管名稱空間能夠幫助您組織類并避免命名約定,但其缺點(diǎn)是名稱過長(zhǎng)。幸運(yùn)的是,PHP 支持使用別名,因此可以在代碼中使用更短的別名。清單 8 提供了一個(gè)示例。
清單 8. 使用別名

命名約定名稱空間命名使用單詞首字母大寫或 PASCAL 命名約定,這與其他 PHP 約定一樣,比如 PHP Extension 和 Application Repository (PEAR) 包命名和文件名。例如,清單 9 中的名稱空間比 清單 10 中的名稱空間要好。
清單 9. 單詞首字母大寫或 PASCAL 命名

避免使用與其他 PHP 約定沖突的命名和大小寫約定。
清單 10. 使用糟糕的大小寫約定

結(jié)束語PHP 中的名稱空間能夠用于組織代碼、避免命名沖突以及為類、函數(shù)和常量提供上下文。在名稱空間中使用模式或約定讓代碼更易于理解,并且更易于引用和使用。html教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 嵊州市| 巴林左旗| 丹寨县| 汨罗市| 蓬溪县| 临沭县| 尚义县| 佛冈县| 宁河县| 新河县| 定陶县| 华安县| 黄梅县| 永丰县| 东明县| 金华市| 苏尼特左旗| 原阳县| 锡林浩特市| 视频| 鸡泽县| 奇台县| 虎林市| 溧阳市| 托里县| 平湖市| 类乌齐县| 遂川县| 石台县| 兴宁市| 察隅县| 三原县| 黄大仙区| 迁安市| 庄浪县| 浏阳市| 贵阳市| 增城市| 黔江区| 申扎县| 页游|