[英]How does name spacing works using PSR4 in laravel 5?
我是laravel新手開發人員,在這里我試圖了解命名空間的工作原理。 因此,我正在學習存儲庫模式,並決定繼續在我的項目中實施它。
所以我創建了一個名為archive
的目錄,然后使用PSR4將其加載到composer.json文件中,如下所示:
"Archive\\": "archive/"
現在,我在archive
文件夾中創建了一個Repositories
文件夾,將在其中創建所有存儲庫。 我在其中給文件命名,如下所示:
namespace Archive\Repositories;
這似乎工作正常。 然后,我在Repositories
文件夾內創建了一個Contracts
文件夾,該文件夾將保存我將要使用的實現的所有接口,例如UserRepositoryInterface
。 我正在命名合同文件夾中的文件,如下所示:
namespace Archive\Repositories\Contracts;
這也很好。
現在,我的疑問在於我要在“ Repositories
文件夾中進行的具體實現。 例如像有一個DbUserRepository
它實現了UserRepositoryInterface
在合同文件夾。
現在,由於我是新手,所以嘗試了:
class DbUserRepository implements Contacts\UserRepositoryInterface
它工作正常,但后來我想應該在文件頂部use
它,如下所示:
use Contacts\UserRepositoryInterface;
我可以做:
class DbUserRepository implements UserRepositoryInterface
它對我來說應該可以正常工作,但它給了我一個類未發現異常,但是當我做類似的事情時:
use Archive\Repositories\Contacts\UserRepositoryInterface;
現在工作正常。 但是,這是我很模糊的地方。 在DbUserRepository
內部,我已經在Archive\\Repositories
的nampspace中,為什么不繼續從那里查看Contracts文件夾呢? 為什么我需要use Archive\\Repositories\\Contacts\\UserRepositoryInterface;
指定完整的use Archive\\Repositories\\Contacts\\UserRepositoryInterface;
我為什么不能說:
use Contacts\UserRepositoryInterface;
我希望我的問題不要太混亂。 盡管我的代碼現在可以正常工作,但是我不清楚命名空間的工作原理。
規則很簡單:
所有namespace
和use
語句始終使用完全限定名稱 (FQN),這意味着它們始終從全局名稱空間開始,並且與其他任何名稱都不相關。 use Foo\\Bar
始終表示\\Foo\\Bar
,無論您使用的是什么名稱空間。
其余代碼中對名稱的所有文字提及均相對於use
語句建立的當前名稱空間和/或別名解決。 new Foo
, extends Foo
,這意味着__NAMESPACE__\\Foo
,或者您可能在某些use
語句中use
別名的任何Foo
。
如果要縮短名稱,則需要使用use
語句,該語句使用類的FQN,而不是相對於當前名稱空間的FQN。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.