PHP namespace是PHP5.3以后引進的一個新特性,可以避免在PHP中出現函數或類的命名沖突。 假如在系統把多個第三方庫的代碼整合在一起時,它們里面有許多同名的函數或類,這種情況會導致一個致命的錯誤。這時候就需要命名空間來幫忙了。接下來我們就看看namespace的具體用法。
定義命名空間可以理解成給類、函數、常量一個名稱,在具有相似名字的類、函數或常量之間劃出一個獨立的空間。下面還會有一些關于如何使用命名空間的例子。
namespace MyProject; class MyClass {} //上面添加了 "namespace MyProject" 之后,MyClass 就被定義在命名空間"MyProject"內。
當然,這個命名空間也可以用在函數和常量上。比如:
namespace MyProject; function myFunction() {} const MYCONST = 1;
好了,我們知道如何定義命名空間了,現在我們要了解一下如何使用這個命名空間。
假設我們有兩個類,它們都叫MyClass,它們分別在兩個命名空間里:MyProject和OtherProject。 那么我們如何在腳本中正確地使用它們呢? 這時候,我們就需要用到命名空間前綴操作符“\”。
use MyProject\MyClass; //使用了MyProject下面的MyClass $obj = new MyClass(); //實例化MyProject下面的MyClass //同理,可以使用OtherProject下面的MyClass use OtherProject\MyClass; $obj = new \OtherProject\MyClass(); //使用OtherProject下面的MyClass
此外,在同一文件中定義多個命名空間,也是完全可以的。看下面的代碼:
namespace MyProject; class MyClass {} namespace OtherProject; class MyClass {} //這樣就讓兩個MyClass都在各自的名字空間內,相互不受影響。 $myClassOne = new MyProject\MyClass(); //現在要使用MyProject的MyClass,在類名前面加上他的命名空間 $myClassTwo = new OtherProject\MyClass(); //使用OtherProject下的MyClass
在一個命名空間中,同一個名稱只能被定義一次,否則會報錯。比如說我們想在MyProject命名空間下面分別定義同名類,那么會報下面的錯誤:
namespace MyProject; class MyClass {} class MyClass {} //嘗試定義同名的MyClass //這時候就會拋出一個Fatal error,看: //Fatal error: Cannot declare class MyProject\MyClass, because the name is already in use
總之,PHP命名空間可以讓我們在編寫大型程序時,更加清晰地組織我們的代碼,避免各種沖突和不必要的干擾。以上,就是對PHP命名空間的一些介紹,希望能對你有所幫助!