您好,登錄后才能下訂單哦!
PHP中命名空間是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
當文件中定義了命名空間,也就是namesapce指定了當前的命名空間后,在調用全局類、函數、常量時,需要添加一個“\”,也就是完全限定訪問符號來標明這個類、函數、常量是全局的那個,而不是當前命名空間中的。特別是當前命名空間中包含與全局類、函數、常量同名的內容時。
namespace FILE6;
function show()
{
echo strtoupper('aaa'), PHP_EOL; // 調用自己的
echo \strtoupper('aaa'), PHP_EOL; // 調用全局的
}
function strtoupper($str)
{
return __NAMESPACE__ . ':' . \strtoupper($str);
}
在這個FILE6命名空間中,我們定義了一個strtoupper()方法。之間說過,命名空間就是為了解決同名問題而出現的,這個方法和全局php自帶的那個方法是完全相同的名稱的。所以,在調用的時候我們需要調用的是哪個方法。那么如果當前命名空間中沒有定義這個方法呢?別急,接下來的內容就是講這個問題。
從上個例子中,我們就可以看出全局完全限定訪問符的作用,當沒有使用全局符時,strtoupper()方法會先調用當前命名空間下的方法。那么后備的作用就是如果當前命名空間中沒有找到時,會去全局找相關的函數。在文檔中的定義是這樣的:
當 PHP 遇到一個非限定的類、函數或常量名稱時,它使用不同的優先策略來解析該名稱。類名稱總是解析到當前命名空間中的名稱。因此在訪問系統內部或不包含在命名空間中的類名稱時,必須使用完全限定名稱。對于函數和常量來說,如果當前命名空間中不存在該函數或常量,PHP 會退而使用全局空間中的函數或常量。
意思也就是說,函數和常量,會有后備去全局查找的能力。但是類不行!!如果要使用全局類,一定要加全局完全限定符。我們通過一個例子來看:
namespace FILE7;
// 類必須使用完全限定的全局空間
$o1 = new \stdClass();
// $o2 = new stdClass(); // Fatal error: Uncaught Error: Class 'FILE7\stdClass' not found
// 方法會先在本命名空間查找,如果沒找到會去全局找
function strlen($str)
{
return __NAMESPACE__ . ':' . (\strlen($str) - 1);
}
echo strlen('abc'), PHP_EOL; // FILE7:2 ,當前命名空間
echo \strlen('abc'), PHP_EOL; // 3 , 全局
echo strtoupper('abc'), PHP_EOL; // ABC, 全局
// 常量也是有后備能力的
const E_ERROR = 22;
echo E_ERROR, PHP_EOL; // 22, 當前命名空間
echo \E_ERROR, PHP_EOL; // 1, 全局
echo INI_ALL, PHP_EOL; // 7, 全局
new D\E()的解析:
為了引用全局命名空間中的全局類,必須使用完全限定名稱 new \C()。
看完上述內容,你們掌握PHP中命名空間是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。