簡體   English   中英

如何在Laravel 5中使用PSR4命名空間?

[英]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;

我希望我的問題不要太混亂。 盡管我的代碼現在可以正常工作,但是我不清楚命名空間的工作原理。

規則很簡單:

  1. 所有namespaceuse語句始終使用完全限定名稱 (FQN),這意味着它們始終從全局名稱空間開始,並且與其他任何名稱都不相關。 use Foo\\Bar始終表示\\Foo\\Bar ,無論您使用的是什么名稱空間。

  2. 其余代碼中對名稱的所有文字提及均相對於use語句建立的當前名稱空間和/或別名解決。 new Fooextends Foo ,這意味着__NAMESPACE__\\Foo ,或者您可能在某些use語句中use別名的任何Foo

如果要縮短名稱,則需要使用use語句,該語句使用類的FQN,而不是相對於當前名稱空間的FQN。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM