PHP中命名空間是什么,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出孝義免費(fèi)做網(wǎng)站回饋大家。
當(dāng)文件中定義了命名空間,也就是namesapce指定了當(dāng)前的命名空間后,在調(diào)用全局類、函數(shù)、常量時(shí),需要添加一個(gè)“\”,也就是完全限定訪問(wèn)符號(hào)來(lái)標(biāo)明這個(gè)類、函數(shù)、常量是全局的那個(gè),而不是當(dāng)前命名空間中的。特別是當(dāng)前命名空間中包含與全局類、函數(shù)、常量同名的內(nèi)容時(shí)。
namespace FILE6;
function show()
{
echo strtoupper('aaa'), PHP_EOL; // 調(diào)用自己的
echo \strtoupper('aaa'), PHP_EOL; // 調(diào)用全局的
}
function strtoupper($str)
{
return __NAMESPACE__ . ':' . \strtoupper($str);
}
在這個(gè)FILE6命名空間中,我們定義了一個(gè)strtoupper()方法。之間說(shuō)過(guò),命名空間就是為了解決同名問(wèn)題而出現(xiàn)的,這個(gè)方法和全局php自帶的那個(gè)方法是完全相同的名稱的。所以,在調(diào)用的時(shí)候我們需要調(diào)用的是哪個(gè)方法。那么如果當(dāng)前命名空間中沒(méi)有定義這個(gè)方法呢?別急,接下來(lái)的內(nèi)容就是講這個(gè)問(wèn)題。
從上個(gè)例子中,我們就可以看出全局完全限定訪問(wèn)符的作用,當(dāng)沒(méi)有使用全局符時(shí),strtoupper()方法會(huì)先調(diào)用當(dāng)前命名空間下的方法。那么后備的作用就是如果當(dāng)前命名空間中沒(méi)有找到時(shí),會(huì)去全局找相關(guān)的函數(shù)。在文檔中的定義是這樣的:
當(dāng) PHP 遇到一個(gè)非限定的類、函數(shù)或常量名稱時(shí),它使用不同的優(yōu)先策略來(lái)解析該名稱。類名稱總是解析到當(dāng)前命名空間中的名稱。因此在訪問(wèn)系統(tǒng)內(nèi)部或不包含在命名空間中的類名稱時(shí),必須使用完全限定名稱。對(duì)于函數(shù)和常量來(lái)說(shuō),如果當(dāng)前命名空間中不存在該函數(shù)或常量,PHP 會(huì)退而使用全局空間中的函數(shù)或常量。
意思也就是說(shuō),函數(shù)和常量,會(huì)有后備去全局查找的能力。但是類不行?。∪绻褂萌诸?,一定要加全局完全限定符。我們通過(guò)一個(gè)例子來(lái)看:
namespace FILE7;
// 類必須使用完全限定的全局空間
$o1 = new \stdClass();
// $o2 = new stdClass(); // Fatal error: Uncaught Error: Class 'FILE7\stdClass' not found
// 方法會(huì)先在本命名空間查找,如果沒(méi)找到會(huì)去全局找
function strlen($str)
{
return __NAMESPACE__ . ':' . (\strlen($str) - 1);
}
echo strlen('abc'), PHP_EOL; // FILE7:2 ,當(dāng)前命名空間
echo \strlen('abc'), PHP_EOL; // 3 , 全局
echo strtoupper('abc'), PHP_EOL; // ABC, 全局
// 常量也是有后備能力的
const E_ERROR = 22;
echo E_ERROR, PHP_EOL; // 22, 當(dāng)前命名空間
echo \E_ERROR, PHP_EOL; // 1, 全局
echo INI_ALL, PHP_EOL; // 7, 全局
new D\E()的解析:
為了引用全局命名空間中的全局類,必須使用完全限定名稱 new \C()。
看完上述內(nèi)容,你們掌握PHP中命名空間是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!