php 命名空間

PHP 命名空間(namespace)是在 PHP 5.3 中加入的弧械,目的是解決重名問題空民,PHP中不允許兩個函數(shù)或者類出現(xiàn)相同的名字,否則會產(chǎn)生一個致命的錯誤画饥。

定義命名空間

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

命名空間通過關(guān)鍵字namespace 來聲明艰额。如果一個文件中包含命名空間椒涯,它必須在其它所有代碼之前聲明命名空間。

語法格式如下:

<?php  
// 定義代碼在 'MyProject' 命名空間中  
namespace MyProject;  
// ... 代碼 ...  

你也可以在同一個文件中定義不同的命名空間代碼祖搓,如:

<?php  
namespace MyProject;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }

namespace AnotherProject;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>  

不建議使用這種語法在單個文件中定義多個命名空間湖苞。建議使用下面的大括號形式的語法。

<?php
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}

namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>
命名空間調(diào)用

PHP 命名空間中的類名可以通過三種方式引用:

1哈扮、非限定名稱蚓再,或不包含前綴的類名稱,例如 $a=new foo()或 foo::staticmethod()摘仅。如果當前命名空間是 currentnamespace,foo 將被解析為 currentnamespace\foo六荒。如果使用 foo 的代碼是全局的矾端,不包含在任何命名空間中的代碼,則 foo 會被解析為foo秩铆。 警告:如果命名空間中的函數(shù)或常量未定義,則該非限定的函數(shù)名稱或常量名稱會被解析為全局函數(shù)名稱或常量名稱捅膘。

2滚粟、限定名稱,或包含前綴的名稱,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();凡壤。如果當前的命名空間是 currentnamespace,則 foo 會被解析為 currentnamespace\subnamespace\foo曹体。如果使用 foo 的代碼是全局的盖奈,不包含在任何命名空間中的代碼,foo 會被解析為subnamespace\foo钢坦。

3、完全限定名稱厨诸,或包含了全局前綴操作符的名稱禾酱,例如绘趋, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();颗管。在這種情況下,foo 總是被解析為代碼中的文字名(literal name)currentnamespace\foo垦江。

下面是一個使用這三種方式的實例:

file1.php 文件代碼

namespace Foo\Bar\subnamespace; 

const FOO = 1;
function foo() {}
class foo
{
    static function staticmethod() {}
}
?>

file2.php 文件代碼

<?php
namespace Foo\Bar;
include 'file1.php';

const FOO = 2;
function foo() {}
class foo
{
    static function staticmethod() {}
}

/* 非限定名稱 */
foo(); // 解析為函數(shù) Foo\Bar\foo
foo::staticmethod(); // 解析為類 Foo\Bar\foo ,方法為 staticmethod
echo FOO; // 解析為常量 Foo\Bar\FOO

/* 限定名稱 */
subnamespace\foo(); // 解析為函數(shù) Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析為類 Foo\Bar\subnamespace\foo,
                                                         // 以及類的方法 staticmethod
echo subnamespace\FOO; // 解析為常量 Foo\Bar\subnamespace\FOO
                                  
/* 完全限定名稱 */
\Foo\Bar\foo(); // 解析為函數(shù) Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析為類 Foo\Bar\foo, 以及類的方法 staticmethod
echo \Foo\Bar\FOO; // 解析為常量 Foo\Bar\FOO
?>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衩藤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌检诗,老刑警劉巖底哗,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涕癣,居然都是意外死亡前标,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門炼列,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氢惋,你說我怎么就攤上這事稽犁。” “怎么了已亥?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵虑椎,是天一觀的道長俱笛。 經(jīng)常有香客問我传趾,道長,這世上最難降的妖魔是什么墨缘? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任零抬,我火速辦了婚禮,結(jié)果婚禮上蝶棋,老公的妹妹穿的比我還像新娘忽妒。我一直安慰自己,他們只是感情好段直,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布鸯檬。 她就那樣靜靜地躺著,像睡著了一般喧务。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庐冯,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天坎穿,我揣著相機與錄音,去河邊找鬼玲昧。 笑死,一個胖子當著我的面吹牛衡载,可吹牛的內(nèi)容都是我干的隙袁。 我是一名探鬼主播弃榨,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼梨睁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坡贺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拳亿,失蹤者是張志新(化名)和其女友劉穎愿伴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹅经,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡怎诫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹦误。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涌哲。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哪廓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涡真,我是刑警寧澤肾筐,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站东亦,受9級特大地震影響唬渗,放射性物質(zhì)發(fā)生泄漏典阵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一嫉鲸、第九天 我趴在偏房一處隱蔽的房頂上張望歹啼。 院中可真熱鬧,春花似錦狸眼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽降宅。三九已至,卻和暖如春腰根,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背额嘿。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工册养, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人球拦。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像愧膀,于是被迫代替她去往敵國和親谣光。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • PHP命名空間 PHP 命名空間(namespace)是在PHP 5.3中加入的蟀悦。PHP 命名空間可以解決以下兩類...
    葉筱Windy閱讀 860評論 0 3
  • [PHP命名空間的作用、為什么使用命名空間莲镣?] 命名空間一個最明確的目的就是解決重名問題,PHP中不允許兩個函數(shù)或...
    胡木木OvO閱讀 164評論 0 0
  • 命名空間的理解 類似于分區(qū)域 / 領(lǐng)域瑞侮。區(qū)域外的東西不影響內(nèi)部鼓拧, 類(包括抽象類和traits)、接口季俩、函數(shù)和常量...
    xiaxiao閱讀 657評論 0 0
  • 1酌住、命名空間的引入原因 命名空間的引入是為了解決變量或者函數(shù)的名字沖突店归; 舉個例子來說酪我, 對于文件A.php 、B...
    逍遙_9985閱讀 2,562評論 1 2
  • 對于命名空間秩伞,官方文檔已經(jīng)說得很詳細[查看]欺矫,我在這里做了一下實踐和總結(jié)纱新。 命名空間一個最明確的目的就是解決重名問...
    斯文小螞蟻閱讀 608評論 0 0