php命名空間舉例介紹使用方法
命名空間是為了解決當(dāng)前文件內(nèi)相同作用域內(nèi)常量名之間、函數(shù)名之間、類名之間的命名沖突。
在 PHP 中變量名是不會(huì)沖突的,在相同作用域內(nèi),對(duì)于同一個(gè)變量,最后一個(gè)變量會(huì)取代前一個(gè)變量的值。
舉例
同一作用域,相同變量
<?php $a = '123'; $a = '456'; $a = '789'; echo $a; //顯示 789
代碼編輯器不報(bào)錯(cuò),PHP運(yùn)行結(jié)果不報(bào)錯(cuò),顯示最后一個(gè) $a 的值。
同一作用域,相同常量
<?php const a = '123'; const a = '356'; const a = '789'; echo a //顯示 123
代碼編輯器報(bào)錯(cuò),PHP運(yùn)行結(jié)果不報(bào)錯(cuò),顯示第一個(gè)常量 a 的值。
常量換成 define 定義
<?php define('a',123); define('a',456); define('a',789); echo a; //顯示 123
代碼編輯器報(bào)錯(cuò),PHP運(yùn)行結(jié)果不報(bào)錯(cuò),顯示第一個(gè)常量 a 的值,和 const 定義常量的結(jié)果一樣。
同一作用域,相同函數(shù)
<?php function a(){ echo '123'; } function a(){ echo '456'; } a(); // PHP 運(yùn)行結(jié)果報(bào)錯(cuò) Cannot redeclare a()
代碼編輯器報(bào)錯(cuò),PHP 運(yùn)行結(jié)果報(bào)錯(cuò)。
同一作用域,相同類
<?php class A{ public function __construct() { echo '123'; } } class A{ public function __construct() { echo '456'; } } new A(); // PHP 運(yùn)行結(jié)果報(bào)錯(cuò) //Fatal error: Cannot declare class A, because the name is already in use in
代碼編輯器報(bào)錯(cuò),PHP 運(yùn)行結(jié)果報(bào)錯(cuò)。
在編程中,如果代碼全都是自己一個(gè)人完成的,常量名之間、函數(shù)名之間、類名之間可能不會(huì)出現(xiàn)重名的情況,但是在實(shí)際的工作中,
1、大多數(shù)任務(wù)都是需要團(tuán)隊(duì)協(xié)作來完成,我們要如何保證自己起的常量名、函數(shù)名、類名不會(huì)和別人起的名字出現(xiàn)重名的狀況?
2、我們要用到別人開發(fā)的框架時(shí),要如何保證自己起的常量名、函數(shù)名、類名不會(huì)和框架的常量名、函數(shù)名、類名出現(xiàn)重名的狀況?
為了解決這兩個(gè)問題,命名空間這項(xiàng)技術(shù)出現(xiàn)了。
<?PHP namespace 命名空間名稱;
其實(shí)命名空間,說白了,就是給相同的常量、函數(shù)、類的名字前面添加不同的前綴,這樣它們的名字就不相同了。
舉例
<?php namespace a; //命名空間 a class ABC { public function __construct() { echo 123; } } namespace b; //命名空間 b class ABC { public function __construct() { echo 456; } }
不會(huì)報(bào)錯(cuò),因?yàn)檫@兩個(gè)類在不同的命名空間下,
在命名空間 a 下的類 ABC 名字已經(jīng)變成 \a\ABC,
在命名空間 b 下的類 ABC 名字已經(jīng)變成 \b\ABC。
當(dāng)一個(gè)文件內(nèi)有多個(gè)命名空間,當(dāng)前命名空間關(guān)鍵字namespace 到下個(gè)命名空間關(guān)鍵字namespace 之間的代碼都屬于當(dāng)前命名空間。
在當(dāng)前命名空間使用其它命名空間的代碼
<?php namespace a; class ABC { public function __construct() { echo 123; } } namespace b; class ABC { public function __construct() { echo 456; } } namespace c; new \a\ABC(); //在命名空間 c 中實(shí)例化命名空間 a 中的 ABC 類 ,輸出 123 /* 因?yàn)楫?dāng)前代碼所在的命名空間是 c 命名空間, 而 a 命名空間是定義在根命名空間下, 所以在 c 命名空間使用 a 命名空間時(shí), a 命名空間前面要加一個(gè)反斜杠 \ ,這個(gè)反斜杠 代表根命名空間,如果沒有這個(gè)反斜杠,new a\ABC() 會(huì)以當(dāng)前命名空間 c 為開頭, 即 new \c\a\ABC(),會(huì)報(bào)錯(cuò)( Fatal error: Uncaught Error: Class 'c\a\ABC' not found ) 因?yàn)?\c\a\ 這個(gè)命名空間下沒有 ABC 類 */ new \b\ABC(); //在命名空間 c 中實(shí)例化命名空間 b 中的 ABC 類 ,輸出 456
到此這篇關(guān)于php命名空間舉例介紹使用方法的文章就介紹到這了,更多相關(guān)php命名空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)觀察者模式(Observer)
這篇文章主要介紹了php設(shè)計(jì)模式中的觀察者模式,使用php實(shí)現(xiàn)觀察者模式,感興趣的小伙伴們可以參考一下2015-12-12淺析php fwrite寫入txt文件的時(shí)候用 \r\n不能換行的問題
以下是對(duì)php中fwrite寫入txt文件的時(shí)候用 \r\n不能換行的問題進(jìn)行了介紹,需要的朋友可以過來參考下2013-08-08thinkphp 字母函數(shù)詳解T/I/N/D/M/A/R/U
下面小編就為大家?guī)硪黄猼hinkphp 字母函數(shù)詳解T/I/N/D/M/A/R/U。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04PHP的Yii框架中過濾器相關(guān)的使用總結(jié)
這篇文章主要介紹了PHP的Yii框架中過濾器相關(guān)的使用總結(jié),文中列舉了一些常用的核心過濾器,需要的朋友可以參考下2016-03-03