close

描述一個使用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. ​​​​​​​

  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

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 蕭瑞文 的頭像
    蕭瑞文

    Neil的部落格

    蕭瑞文 發表在 痞客邦 留言(0) 人氣()