描述一個使用Dependenc injection containers的常見介面
ContainerInterface
is 用於標準化framwork和libraries如何使用container去獲取物件和參數,在接下來都是以entries稱呼。
implementor 在文件被稱為在framwork or libraries 實作了 ContainerInterface 的class
使用depency injection containers 的使用人 稱為 user
.
1. Specification
1.1 Basics
1.1.1 Entry identifiers
An entry identifier是一個php-legal string,至少one char長度,且獨一無二的字串,代表的在container裡面的一個item,然後caller不應該預設說這些entry identifiers的string有任何語意上的意思,僅僅是字串罷了。
1.1.2 Reading from a container
Psr\Container\ContainerInterface 提供 get() 和 has()兩種方法
get 需傳送一個必要的參數,entry identifier,必須是一個string,get() 可以回傳任何的資料或者 throw a NotFoundExceptionInterface
假設傳樹的identifier在該容器內找不到
連續兩個成功的get()方法呼叫必須回傳相同的資料,而不能回傳不同的資料。 然而因為 implementor
design 或者是 user
configuration 的關係,還是有可能因此回傳兩個不同的數值
所以說不建議 rely on getting the same value on 2 successive calls.
has 方法需要一個參數 entryidentifier,必須是string, has方法一定要return true假設entry identifier 是存在於container的,除非沒有則return false
然而假設has($id) return false則get($id)必須回傳 NotFoundExceptionInterface
1.2 Exceptions
Exceptions直接在container中被丟出的化,該container應該實作 Psr\Container\ContainerExceptionInterface
.
A call to the get method with a non-existing id must throw a Psr\Container\NotFoundExceptionInterface
.
1.3 Recommended usage
Users在使用container時,不建議再次將Container當成Object注入到其他的 container之中了! 這樣代表container是使用 Service Locator pattern 然而這個pattern並不推薦被使用
細節再section 4
https://www.php-fig.org/psr/psr-11/#container-exception
2. Package
Interfaces and Classes的描述和相關例外,內容都在psr/container的package當中。
Packages providing a PSR container implementation should declare that they provide psr/container-implementation
1.0.0
.
Projects requiring an implementation should require psr/container-implementation
1.0.0
.
3. Interfaces
https://www.php-fig.org/psr/psr-11/#container-exception
留言列表