php命名空間舉例介紹使用方法
命名空間是為了解決當(dāng)前文件內(nèi)相同作用域內(nèi)常量名之間、函數(shù)名之間、類名之間的命名沖突。
在 PHP 中變量名是不會沖突的,在相同作用域內(nèi),對于同一個變量,最后一個變量會取代前一個變量的值。
舉例
同一作用域,相同變量
<?php $a = '123'; $a = '456'; $a = '789'; echo $a; //顯示 789
代碼編輯器不報錯,PHP運行結(jié)果不報錯,顯示最后一個 $a 的值。
同一作用域,相同常量
<?php const a = '123'; const a = '356'; const a = '789'; echo a //顯示 123
代碼編輯器報錯,PHP運行結(jié)果不報錯,顯示第一個常量 a 的值。
常量換成 define 定義
<?php
define('a',123);
define('a',456);
define('a',789);
echo a; //顯示 123代碼編輯器報錯,PHP運行結(jié)果不報錯,顯示第一個常量 a 的值,和 const 定義常量的結(jié)果一樣。
同一作用域,相同函數(shù)
<?php
function a(){
echo '123';
}
function a(){
echo '456';
}
a(); // PHP 運行結(jié)果報錯 Cannot redeclare a()代碼編輯器報錯,PHP 運行結(jié)果報錯。
同一作用域,相同類
<?php
class A{
public function __construct()
{
echo '123';
}
}
class A{
public function __construct()
{
echo '456';
}
}
new A(); // PHP 運行結(jié)果報錯
//Fatal error: Cannot declare class A, because the name is already in use in代碼編輯器報錯,PHP 運行結(jié)果報錯。
在編程中,如果代碼全都是自己一個人完成的,常量名之間、函數(shù)名之間、類名之間可能不會出現(xiàn)重名的情況,但是在實際的工作中,
1、大多數(shù)任務(wù)都是需要團隊協(xié)作來完成,我們要如何保證自己起的常量名、函數(shù)名、類名不會和別人起的名字出現(xiàn)重名的狀況?
2、我們要用到別人開發(fā)的框架時,要如何保證自己起的常量名、函數(shù)名、類名不會和框架的常量名、函數(shù)名、類名出現(xiàn)重名的狀況?
為了解決這兩個問題,命名空間這項技術(shù)出現(xiàn)了。
<?PHP namespace 命名空間名稱;
其實命名空間,說白了,就是給相同的常量、函數(shù)、類的名字前面添加不同的前綴,這樣它們的名字就不相同了。
舉例
<?php
namespace a; //命名空間 a
class ABC {
public function __construct()
{
echo 123;
}
}
namespace b; //命名空間 b
class ABC {
public function __construct()
{
echo 456;
}
}不會報錯,因為這兩個類在不同的命名空間下,
在命名空間 a 下的類 ABC 名字已經(jīng)變成 \a\ABC,
在命名空間 b 下的類 ABC 名字已經(jīng)變成 \b\ABC。
當(dāng)一個文件內(nèi)有多個命名空間,當(dāng)前命名空間關(guān)鍵字namespace 到下個命名空間關(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 中實例化命名空間 a 中的 ABC 類 ,輸出 123
/*
因為當(dāng)前代碼所在的命名空間是 c 命名空間, 而 a 命名空間是定義在根命名空間下,
所以在 c 命名空間使用 a 命名空間時, a 命名空間前面要加一個反斜杠 \ ,這個反斜杠
代表根命名空間,如果沒有這個反斜杠,new a\ABC() 會以當(dāng)前命名空間 c 為開頭,
即 new \c\a\ABC(),會報錯( Fatal error: Uncaught Error: Class 'c\a\ABC' not found )
因為 \c\a\ 這個命名空間下沒有 ABC 類
*/
new \b\ABC(); //在命名空間 c 中實例化命名空間 b 中的 ABC 類 ,輸出 456到此這篇關(guān)于php命名空間舉例介紹使用方法的文章就介紹到這了,更多相關(guān)php命名空間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php導(dǎo)出excel格式數(shù)據(jù)問題
本篇文章主要是對php導(dǎo)出excel格式數(shù)據(jù)的問題進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-03-03
老版本PHP轉(zhuǎn)義Json里的特殊字符的函數(shù)
本文給大家分享的是一則在老版本的php里使用的PHP轉(zhuǎn)義Json里的特殊字符的函數(shù),雖然不是很實用了,但還是記錄一下,有需要的小伙伴可以參考下。2015-06-06
php獲取當(dāng)前網(wǎng)址url并替換參數(shù)或網(wǎng)址的方法
今天在項目中用到的兩個函數(shù),自己寫了下,備用,需要的朋友也可以直接使用了,推薦第一個函數(shù)為獲取,后面為相關(guān)的處理參數(shù)。2010-06-06
php array_chunk()函數(shù)用法與注意事項
這篇文章主要介紹了php array_chunk()函數(shù)用法與注意事項,結(jié)合實例形式分析了php數(shù)組分割函數(shù)array_chunk()相關(guān)功能、用法及操作注意事項,需要的朋友可以參考下2019-07-07
PHP preg_match實現(xiàn)正則表達式匹配功能【輸出是否匹配及匹配值】
這篇文章主要介紹了PHP preg_match實現(xiàn)正則表達式匹配功能,較為詳細(xì)的介紹了preg_match函數(shù)的功能、參數(shù)含義、返回值及使用方法,并結(jié)合實例給出了preg_match輸出是否匹配及匹配值的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-07-07

