PHP Namespace 作用
PHP Namespace 是 PHP 5.3 及以上版本的一個特性,它是為避免不同的代碼之間同名函數、類、常量等發生沖突而產生的一個解決方案。通過使用 PHP Namespace,可以將應用程序中的不同部分進行分組,從而避免了不同部分之間名稱的沖突。
舉例說明,簡單來講 Namespace 就如同房屋中的房間一樣,每一個房間中可以做不同的事情,不同的事情也就對應不同的實體對象。比如說,我們寫了一個名字叫做“Person”的類,在一個大型項目中,其他程序員會因為不知道你寫了一個同名類而建立同名類。其實這就是Namespace要解決的問題,我們可以自己定一個 Namespace,比如說“MyProject”,這樣就構成了類名“MyProject/Person”,從而避免了與其他程序員編寫的類發生沖突。
//定義Namespace namespace MyProject; //定義類 class Person{ //定義類的方法 public function sayHello(){ echo "Hello there!"; } } //使用類 $person = new MyProject\Person(); $person->sayHello();
如上述代碼,首先定義了一個 Myproject 的 Namespace,再在此 Namespace 下定義一個 Person 類,再通過實例化來調用此方法。
可以用花括號封裝多層Namespace,例如定義一個\MyProject\Admin\User類時
namespace MyProject{ namespace Admin{ class User{} } }
這樣可以通過
PHP Namespace 最為普及的使用場景是在 Composer 以及 Laravel 應用開發中,通過使用 Composer 我們可以輕易地將其他開發者的代碼集成到我們自己的應用程序中,同時又可以將我們的代碼供其他開發者使用,Composer 可以自動解決依賴關系,并確保不會由于合并兩個不同的 Library 引起沖突。
在 Laravel 中,所有的內置核心代碼都在 Illuminate Namespace 下,而使用文件的正0理可以使我們很輕松地訪問代碼。比如說Laravel中的 Illuminate\Console 是一個 Namespace,訪問其中的 Command 類,則可以用 Illuminate\Console\Command 訪問。
namespace Illuminate\Console; use Illuminate\Console\Command; class MyCommand extends Command{ protected $signature = 'my:command'; public function handle(){ $this->info('My command!'); } }
以上代碼中,我們定義了一個 MyCommand 類,它繼承自 Illuminate\Console\Command,然后定義了一個 handle 方法,并輸出了內容“My command”。
綜上所述,PHP Namespace 為我們提供了模塊化編程解決方案,避免了各模塊之間命名沖突的問題。在實際項目中不僅可以通過 Composer 整合第三方代碼,同時還可以便于分解代碼、重構、管理等操作。