PHP新特性——命名空間

命名空間:

       現代的PHP特性中最重要的恐怕就是命名空間了,如果曾經接觸過java、C#等語言的話,大概對這個名詞不會太陌生,而命名空間則是在PHP5.3.0中引入的。

       其作用是按照一種虛擬的層次結構組織代碼PHP代碼,這種層次結構類似操作系統中文件系統的目錄結構。

      *現代的PHP組件和框架都放在各自的全局唯一的廠商命名空間中,以免與其他廠商使用的常見類名衝突。

聲明命名空間:

<?php
namespace Toby\son1\son2;
class Test 
{
	# code...
}  

代碼中第二行語句就是PHP命名空間聲明語句。這句代碼代碼告訴我們,Test類在廠商命名空間Toby裏面的,而且也在後面son1、son2兩個子命名空間裏面。

*聲明命名空間的代碼始終應該放在<?php標籤後的第一行,PHP命名空間是一個虛擬概念,沒有必要與物理文件系統中文件目錄保持一致,但是大多數時候我們都會這樣做,因爲對於個人來說易於使用,對於PHP組件是爲了兼容PSR-4標準。

另外我們可以在不同的文件中編寫屬於同一個命名空間的多個類。

使用命名空間:

<?php
$response= new \Toby\son1\son2\Test('test','100');
$response->send();

<?php
use Toby\son1\son2\Test;
$response= new Test('test','100');
$response->send();
以上兩種方法都是使用命名空間,顯然第二種更爲方便,我們通過use關鍵字告訴PHP我們想使用Test類,並且只需輸入一次完全限定的類名,隨後直接實例化。

當然如果特別懶的話,還可以使用別名,如下:

<?php
use Toby\son1\son2\Test as T;
$r= new T('test','100');
$r->send();

從PHP5.6開始還可以導入函數和變量,不過要調整use關鍵字的句法,如果想導入函數,要把use改成use func:

<?php 
use func Namespace\functionName;

functionName();

如果想導入常量,要把use改成use constant:

<?php 
use constant Namespace\CONST_NAME;

echo CONST_NAME;
函數和常量的別名與類別名的創建方式一樣。


另外,PHP允許在一個PHP文件中定義多個命名空間,如下:

<?php 
namespace A{
	#code.......
}

<?php 
namespace B{
	#code.......
}
*但是這麼做總是讓人感覺不舒服,違背了一個文件定義一個類的良好時間,一個文件使用一個命名空間,代碼簡單,易於糾錯,因此此種情況不建議使用。


有些代碼可能沒有命名空間,這些代碼在全局命名空間中,PHP原生的Exception類就是如此,在命名空間中引用全局命名空間中的代碼時,要在類、接口、函數或常量的名稱前加上 \ 符號,例如:

<?php 
namespace My\APP;
class A{
	public function doSomething()
	{
		throw new \Exception();
	}
}



PS:發現有誤!請及時糾正,謝謝!





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章