題記:由于php語言是弱類型的語言所以定義起來很隨意尤其是在類名上两芳,由于類名可以跟文件名不同撵孤,所以不同的文件引入的可能是同一個命名方式的class所以就會爆炸B踝拧!P奥搿T2ぁ!php沒有包的概念
include就等于幫其他文件中的code全部粘貼過來闭专,所以很坑爹奴潘。
php命名規(guī)范顯得格外的重要,為了避免以上的慘劇發(fā)生影钉,php提供了兩個機制include_once /require_once(已經(jīng)加載的文件內(nèi)容不再加載)画髓,但如果確實有需要兩個class重復(說的有點違心,作為程序員就算class重復平委,我也會把它改成不重復奈虾,重復的class太麻煩了,后期難免會出問題)
所謂命名空間就是namespace 空間名;例如下圖1.0:我定義了空間名為foo現(xiàn)在我把10.php下圖1.1引入進來廉赔,現(xiàn)在就來問題了同樣的class Human 怎么區(qū)分呢愚墓,沒關(guān)系,命名空間是這樣解決的我想訪問10.php中的內(nèi)容就$lihua=new \Foo\Bar\Human; 我想訪問當前文件下的Human 正常new就行昂勉,當然也可以$lihua=new \Foo \Human;這樣搞
那么如何訪問沒有定義命名空間的class呢? 命名空間如果沒有定義的話默認是根目錄下的命名空間
也就是說我想要訪問human的話 必須要$a=new\Human (在命名空間下new必須要這樣)
但是這樣寫實在太丑了(為了安全我全部用完全限定名稱扫腺,其他的不做說明)岗照,php提供了use關(guān)鍵詞,phper new對象或者使用函數(shù)的時候可以把可以把命名空間寫到前面但是一定要具體到class或者函數(shù),否則報錯攒至,具體寫法如下圖2所示:
接下來世界重回正軌 又可以 $a =new?Human();了 注意一次引入多個命名空間厚者,需要考慮引入的命名空間是否有重復的class或者函數(shù),否則又TMD尷尬了迫吐,如果有且一定要讓他存在我還是建議你用$lihua=new?\Foo \Human吧~~~~~~~~