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é)作來(lái)完成,我們要如何保證自己起的常量名、函數(shù)名、類名不會(huì)和別人起的名字出現(xiàn)重名的狀況?
2、我們要用到別人開(kāi)發(fā)的框架時(shí),要如何保證自己起的常量名、函數(shù)名、類名不會(huì)和框架的常量名、函數(shù)名、類名出現(xiàn)重名的狀況?
為了解決這兩個(gè)問(wèn)題,命名空間這項(xiàng)技術(shù)出現(xiàn)了。
<?PHP namespace 命名空間名稱;
其實(shí)命名空間,說(shuō)白了,就是給相同的常量、函數(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è)反斜杠
代表根命名空間,如果沒(méi)有這個(gè)反斜杠,new a\ABC() 會(huì)以當(dāng)前命名空間 c 為開(kāi)頭,
即 new \c\a\ABC(),會(huì)報(bào)錯(cuò)( Fatal error: Uncaught Error: Class 'c\a\ABC' not found )
因?yàn)?\c\a\ 這個(gè)命名空間下沒(méi)有 ABC 類
*/
new \b\ABC(); //在命名空間 c 中實(shí)例化命名空間 b 中的 ABC 類 ,輸出 456到此這篇關(guān)于php命名空間舉例介紹使用方法的文章就介紹到這了,更多相關(guān)php命名空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php intval的測(cè)試代碼發(fā)現(xiàn)問(wèn)題
測(cè)試php intval函數(shù)的代碼:2008-07-07
解析php利用正則表達(dá)式解決采集內(nèi)容排版的問(wèn)題
本篇文章是對(duì)php利用正則表達(dá)式解決采集內(nèi)容排版問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php導(dǎo)出excel格式數(shù)據(jù)問(wèn)題
本篇文章主要是對(duì)php導(dǎo)出excel格式數(shù)據(jù)的問(wèn)題進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03
老版本PHP轉(zhuǎn)義Json里的特殊字符的函數(shù)
本文給大家分享的是一則在老版本的php里使用的PHP轉(zhuǎn)義Json里的特殊字符的函數(shù),雖然不是很實(shí)用了,但還是記錄一下,有需要的小伙伴可以參考下。2015-06-06
php獲取當(dāng)前網(wǎng)址url并替換參數(shù)或網(wǎng)址的方法
今天在項(xiàng)目中用到的兩個(gè)函數(shù),自己寫(xiě)了下,備用,需要的朋友也可以直接使用了,推薦第一個(gè)函數(shù)為獲取,后面為相關(guān)的處理參數(shù)。2010-06-06
php array_chunk()函數(shù)用法與注意事項(xiàng)
這篇文章主要介紹了php array_chunk()函數(shù)用法與注意事項(xiàng),結(jié)合實(shí)例形式分析了php數(shù)組分割函數(shù)array_chunk()相關(guān)功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2019-07-07
PHP+MySQL實(shí)現(xiàn)無(wú)極限分類欄目的方法
這篇文章主要介紹了PHP+MySQL實(shí)現(xiàn)無(wú)極限分類欄目的方法,涉及php操作數(shù)據(jù)庫(kù)查詢及結(jié)果集遞歸遍歷的技巧,需要的朋友可以參考下2015-12-12
PHP preg_match實(shí)現(xiàn)正則表達(dá)式匹配功能【輸出是否匹配及匹配值】
這篇文章主要介紹了PHP preg_match實(shí)現(xiàn)正則表達(dá)式匹配功能,較為詳細(xì)的介紹了preg_match函數(shù)的功能、參數(shù)含義、返回值及使用方法,并結(jié)合實(shí)例給出了preg_match輸出是否匹配及匹配值的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-07-07

