關(guān)于PHP中的命名空間學(xué)習(xí)及使用

關(guān)于PHP中的命名空間

By:0x584A Date:2015年10月28日 23:08:57

0x01 前言

最近都在啃ThinkPHP以及Yii2兩個開源框架嫂拴,其中比較重要的一個核心便是命名空間筒狠。
起初寫代碼時沒關(guān)注這個箱沦,但印象里老師有教過(其實是自己忘掉了)饱普。所以今天便來惡補了下套耕,其實理解起來挺簡單并不難。

以前大學(xué)時搗鼓ASP.NET匈挖,也出去在網(wǎng)絡(luò)公司工作了一年,小公司嘛大部分還是用工廠模式開發(fā)舶吗。隨后便換了工作荒廢了一年誓琼,現(xiàn)在才轉(zhuǎn)入PHP的語言腹侣。說來真的慚愧齿穗,當在PHP中見到命名空間時
想起C#中就有窃页,但因為很少用所以模模糊糊的脖卖。

0x02 為什么PHP中使用命名空間?

當兩個php文件中定義了同名的類時作儿,便會引起命名沖突的錯誤攻锰。列:

A.php
<?php
class setClass
{
    function getClass(){
        echo "my Class -> A";
    }
}
?>

B.php
<?php
class setClass
{
    function getClass(){
        echo "my Class -> A";
    }
}
?>

Test.php
<?php
require_once 'A.php';
require_once 'B.php';
?>

顯示錯誤提示:

Fatal error: Cannot redeclare class setClass in H:\yii2\B.php on line 4

致命的錯誤:不能重新聲明類setClass

0x03 如何使用命名空間

定義:

A.php
<?php
namespace aaa; # 定義名稱aaa
class setClass
{
    function getClass(){
        echo "my Class -> A";
    }
}
?>

B.php
<?php
namespace bbb; # 定義名稱bbb
class setClass
{
    function getClass(){
        echo "my Class -> A";
    }
}
?>

Test.php
<?php
require_once 'A.php';
require_once 'B.php';
?>

這樣定義后娶吞,運行Test.php便不會出現(xiàn)類名沖突的問題了。

也可以將namespace bbb;改寫成use bbb; 在實現(xiàn)效果上械姻,兩者都是一致的妒蛇。

我們在使用時只需如下使用即可:

Test.php
<?php
require_once 'A.php';
require_once 'B.php';

$A = new aaa\setClass; # 實例化命名空間aaa下的setClass類
$A->getClass();
?>

我們還可以改寫成如下形式:

Test.php
<?php
require_once 'A.php';
require_once 'B.php';
use aaa\setClass; # 引入名稱空間aaa下的steClass類

$A = new setClass; # 實例化setClass類
$A->getClass();
?>

0x04 命名空間的別名使用

當然出現(xiàn)如下代碼時,會出現(xiàn)致命錯誤楷拳,說不能使用bbb\setClass用作實例化steClass绣夺,因為該名稱已被使用。這時候就需要用到別名了欢揖。

Test.php
<?php
require_once 'A.php';
require_once 'B.php';
use aaa\setClass; # 引入名稱空間aaa下的steClass類
use bbb\setClass; # 引入名稱空間bbb下的steClass類

$A = new setClass; # 實例化setClass類
$A->getClass();
?>

改寫成如下格式:

Test.php
<?php
require_once 'A.php';
require_once 'B.php';
use aaa\setClass;
use bbb\setClass as bbb;

$A = new bbb(); # 實例化別名bbb的setClass類
$A->getClass();
?>

0x05 全局命名空間

比如說陶耍,現(xiàn)在又有一個C.php,被引入到Test.php文件中她混。

C.php
<?php
class setClass
{
    function getClass(){
        echo "my Class -> C";
    }
}
?>

Test.php
<?php
require_once 'A.php';
require_once 'B.php';
require_once 'C.php'; # 引入C.php文件
?>

此時我們想要使用C.php的setClass類中g(shù)etClass方法烈钞,則需在實例化時在前面加一個反斜杠‘\’

<?php
require_once 'A.php';
require_once 'B.php';
require_once 'C.php'; # 引入C.php文件

$C = new \setClass; # 加上'\' 則說明實例化頂級空間中的setClass類
$C->getClass();
?>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泊碑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子馒过,更是在濱河造成了極大的恐慌,老刑警劉巖留凭,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窍霞,居然都是意外死亡郁季,警方通過查閱死者的電腦和手機似枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門答憔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侯嘀,你說我怎么就攤上這事吠谢。” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵矾柜,是天一觀的道長里覆。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么呻逆? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任呼奢,我火速辦了婚禮,結(jié)果婚禮上简烘,老公的妹妹穿的比我還像新娘。我一直安慰自己退子,他們只是感情好七兜,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布恬惯。 她就那樣靜靜地躺著,像睡著了一般碗暗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天碰缔,我揣著相機與錄音,去河邊找鬼。 笑死榆芦,一個胖子當著我的面吹牛崎淳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼跌捆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了克蚂?” 一聲冷哼從身側(cè)響起摸恍,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缭召,失蹤者是張志新(化名)和其女友劉穎搪哪,沒想到半個月后惑朦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡胃珍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年缔莲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片读拆。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡个榕,死狀恐怖继控,靈堂內(nèi)的尸體忽然破棺而出霹崎,到底是詐尸還是另有隱情眶拉,我是刑警寧澤冯挎,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站咙鞍,受9級特大地震影響房官,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜续滋,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一翰守、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疲酌,春花似錦蜡峰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽早像。三九已至,卻和暖如春肖爵,著一層夾襖步出監(jiān)牢的瞬間卢鹦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工劝堪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冀自,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓秒啦,卻偏偏與公主長得像熬粗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子余境,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

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

  • 收藏自cnblog驻呐,寫的非常清晰,感謝作者‘流金歲月’http://www.cnblogs.com/kuyuecs...
    InitialX閱讀 1,198評論 0 5
  • 對于命名空間芳来,官方文檔已經(jīng)說得很詳細[查看]含末,我在這里做了一下實踐和總結(jié)。 命名空間一個最明確的目的就是解決重名問...
    司馬東陽閱讀 240評論 0 0
  • 對于命名空間即舌,官方文檔已經(jīng)說得很詳細[查看]佣盒,我在這里做了一下實踐和總結(jié)。 命名空間一個最明確的目的就是解決重名問...
    斯文小螞蟻閱讀 608評論 0 0
  • PHP 學(xué)習(xí)目錄 ├─PHP視頻教程 1 LAMP網(wǎng)站構(gòu)建 │ ├─PHP教程 1.1.1 新版視頻形式介紹│ ...
    曹淵說創(chuàng)業(yè)閱讀 16,157評論 29 417
  • 對于命名空間顽聂,官方文檔已經(jīng)說得很詳細[查看]肥惭,我在這里做了一下實踐和總結(jié)。 命名空間一個最明確的目的就是解決重名問...
    斯文小螞蟻閱讀 378評論 0 0