五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > PHP 5.3中的命名空間:你用過了么?

PHP 5.3中的命名空間:你用過了么?

文章來源:365jz.com     點(diǎn)擊數(shù):175    更新時(shí)間:2009-12-20 00:35   參與評(píng)論

命名空間是PHP 5.3中最重要的變化,對(duì)于C#和Java開發(fā)人員對(duì)這個(gè)詞語非常熟悉了,他們終于可以更好地改變PHP應(yīng)用程序的結(jié)構(gòu)了。

為什么我們需要命名空間?

隨著你的PHP代碼庫(kù)的增長(zhǎng),對(duì)之前定義的函數(shù)和類名進(jìn)行修改時(shí)風(fēng)險(xiǎn)也更高了,當(dāng)你試圖增加第三方組件或插件時(shí)問題更嚴(yán)重,如果存在兩個(gè)或兩個(gè)以上的代碼集實(shí)現(xiàn)了一個(gè)“Database”和“User”類會(huì)怎么樣?

直到目前,唯一的解決辦法是使用長(zhǎng)的類/函數(shù)名,例如Wordpress在每個(gè)類和函數(shù)名前都使用了前綴“WP_”, Zend Framework使用了極具描述性的命名約定,導(dǎo)致類名非常冗長(zhǎng),如:

Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive

命名沖突問題可以使用命名空間來解決,PHP常量、類和函數(shù)可以被組合到命名空間庫(kù)中。

如何定義命名空間?

默認(rèn)情況下,所有常量、類和函數(shù)名都放在全局空間下,就和PHP支持命名空間之前一樣。

在PHP文件的頂部使用一個(gè)關(guān)鍵字namespace就可以定義命名空間,它必須是第一個(gè)命令(declare除外),在它前面不能出現(xiàn)非PHP代碼、HTML或空格。如:

< ?php  // define this code in the 'MyProject' namespace  namespace MyProject;   // ... code ...  這一行下面的代碼都是指定給MyProject命名空間的,為相同代碼塊嵌套命名空間或定義多個(gè)命名空間是不可能的,如果你真這樣干,只有最后一個(gè)命名空間才能識(shí)別,但你可以在同一個(gè)文件中定義不同的命名空間代碼,如:

< ?php  namespace MyProject1;  // PHP code for the MyProject1 namespace   namespace MyProject2;  // PHP code for the MyProject2 namespace   // Alternative syntax  namespace MyProject3 {   // PHP code for the MyProject3 namespace  }  ?>  盡管這么干是可以的,但我建議你不要這么做,最好還是每個(gè)文件中只定義一個(gè)命名空間,免得把你弄糊涂了。

子命名空間

PHP允許定義具有層次的命名空間以便庫(kù)能夠細(xì)分,子命名空間使用一個(gè)反斜線字符(\)分隔,如:

◆MyProject\SubName

◆MyProject\Database\MySQL

◆CompanyName\MyProject\Library\Common\Widget1

調(diào)用命名空間代碼

在lib1.php文件中我們使用App\Lib1 namespace命名空間定義了一個(gè)常量、一個(gè)函數(shù)和一個(gè)類,如:

lib1.php

< ?php  // application library 1  namespace App\Lib1;   const MYCONST = 'App\Lib1\MYCONST';   function MyFunction() {   return __FUNCTION__;  }   class MyClass {   static function WhoAmI() {    return __METHOD__;   }  }  ?> 現(xiàn)在我們可以在另一個(gè)PHP文件包括這段代碼,如:

myapp.php

< ?php  header('Content-type: text/plain');  require_once('lib1.php');   echo \App\Lib1\MYCONST . "\n";  echo \App\Lib1\MyFunction() . "\n";  echo \App\Lib1\MyClass::WhoAmI() . "\n";  ?> 在myapp.php中并沒有定義命名空間,因此這段代碼存在全局空間中,任何對(duì)MYCONST、MyFunction和MyClass的直接引用都會(huì)失敗,因?yàn)樗鼈兇嬖谟贏pp\Lib1命名空間中,為了調(diào)用lib1.php中的代碼,我們可以在\App\Lib1命名空間前添加前綴定義一個(gè)完全合格的名稱,下面是我載入myapp.php時(shí)的輸出結(jié)果:

App\Lib1\MYCONST    App\Lib1\MyFunction    App\Lib1\MyClass::WhoAmI 完全合格名稱可以變得很長(zhǎng),定義長(zhǎng)名稱,如App-Lib1-MyClass,有一些明顯的好處。

原文:How to Use PHP Namespaces, Part 1: The Basics

作者:Craig Buckler

本文作者:未知

如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (175人查看,0條評(píng)論)
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)