本文實(shí)例講述了php命名空間設(shè)計(jì)思想、用法與缺點(diǎn)。分享給大家供大家參考,具體如下:
相比C#等語(yǔ)言,你可以在php函數(shù)里面隨意定義變量并賦值,而不用擔(dān)心覆蓋了全局變量,或者類變量;你也可以隨意的定義類變量,而不用擔(dān)心會(huì)和函數(shù)名沖突,因?yàn)樽兞壳懊娑加袀€(gè)$。
php的命名空間和全局變量、局部變量的設(shè)計(jì)思想一樣,都是為了盡可能的減少命名沖突。php的命名空間可以和文件系統(tǒng)類似,有相對(duì)命名空間和絕對(duì)命名空間。
定義命名空間
必須是第一個(gè)語(yǔ)句,前面不能有任何語(yǔ)句,注釋可以。
必須是絕對(duì)命名空間。
namespace bookrpg/config;//或者namespace bookrpg/config{}namespace /bookrpg/config; //錯(cuò)誤,不能有前導(dǎo)/導(dǎo)入命名空間
必須是絕對(duì)命名空間。
use bookrpg/config/ClassName;use /bookrpg/config/ClassName; //可以有前導(dǎo)/,但不建議加use bookrpg/config/ClassName as NewClassName;use Exception;use /Exception; //可以有前導(dǎo)/,但不建議加
使用命名空間
使用絕對(duì)命名空間
$cls = new /bookrpg/config/ClassName();class MyException extends /Exception{}使用相對(duì)命名空間
namespace bookrpg{ //等同于new /bookrpg/config/ClassName(); $cls = new config/ClassName(); //錯(cuò)誤,php會(huì)認(rèn)為是/bookrpg/Exception,而不是全局類Exception $ex = new Exception();}怪異的地方
C++、Java、C#都有相似的命名空間概念,而php的命名空間不跟隨大流,有自己的一套獨(dú)立的思想,對(duì)于先入為主的人來(lái)來(lái)說(shuō)就顯得怪異和令人迷惑。
命名空間中居然有反斜杠?
點(diǎn)號(hào)(.)已經(jīng)被用作字符串連接符了,又要區(qū)分絕對(duì)和相對(duì)命名空間,new .a.b.c()太不美觀,所以選擇反斜杠吧。
一旦使用了命名空間,使用全局類也要加上“/”或者use一下,累不累呀?
沒(méi)辦法,為了嚴(yán)格類比文件系統(tǒng)的概念,也為了隨便定義類名,而不用擔(dān)心類名沖突。
既然是嚴(yán)格類比文件系統(tǒng),為什么定義和導(dǎo)入命名空間的時(shí)候,前面不加/呢?
只能說(shuō),php的設(shè)計(jì)者不是完美主義者。
但php的命名空間確實(shí)缺乏邏輯完美性:
使用建議
理解了php命名空間的設(shè)計(jì)思想,并避免其設(shè)計(jì)不完美的地方,這樣看來(lái)php的命名空間也是很容易接受的。
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選