PSR-11:容器接口

容器界面

本文档描述了依赖注入容器的通用接口。

设定的目标ContainerInterface是标准化框架和库如何使用容器来获取对象和参数(在本文档的其余部分中称为条目)。

本文件中的关键词“必须”,“不得”,“必须”,“应该”,“不应该”,“应该”,“不应该”,“推荐”,“可以”和“可选”按照RFC 2119中的描述进行解释

implementor本文档中的单词将被解释为ContainerInterface在依赖注入相关的库或框架中实现它的人。依赖注入容器(DIC)的用户被称为user

1.规格

1.1基础知识

1.1.1条目标识符

条目标识符是至少一个字符的任何PHP合法字符串,用于唯一标识容器中的项目。条目标识符是不透明的字符串,因此调用者不应该假设字符串的结构带有任何语义含义。

1.1.2从容器中读取

  • Psr\Container\ContainerInterface公开两种方法:gethas

  • get采用一个必需参数:一个条目标识符,它必须是一个字符串。 get可以返回任何内容(混合值),或者NotFoundExceptionInterface如果容器不知道标识符则抛出a get具有相同标识符的两次连续调用应该返回相同的值。但是,根据implementor 设计和/或user配置,可能会返回不同的值,因此 user不应该依赖于在2次连续调用中获得相同的值。

  • has采用一个唯一的参数:一个条目标识符,它必须是一个字符串。 如果容器已知条目标识符,则has必须返回,true否则false如果has($id)返回false,get($id)必须抛出一个NotFoundExceptionInterface

1.2例外情况

容器直接抛出的异常应该实现 Psr\Container\ContainerExceptionInterface

get用不存在的id 调用方法必须抛出一个 Psr\Container\NotFoundExceptionInterface

用户不应该将容器传递给对象,以便对象可以检索自己的依赖项这意味着容器用作服务定位器 ,这是一种通常不鼓励的模式。

有关更多详细信息,请参阅META文档的第4部分。

2.包装

描述的接口和类以及相关的异常作为psr / container包的一部分提供

提供PSR容器实现的包应声明它们提供psr/container-implementation 1.0.0

需要实施的项目应该要求psr/container-implementation 1.0.0

3.接口

3.1。PSR \集装箱\ ContainerInterface

<?php
namespace Psr\Container;

/**
 * Describes the interface of a container that exposes methods to read its entries.
 */
interface ContainerInterface
{
    /**
     * Finds an entry of the container by its identifier and returns it.
     *
     * @param string $id Identifier of the entry to look for.
     *
     * @throws NotFoundExceptionInterface  No entry was found for **this** identifier.
     * @throws ContainerExceptionInterface Error while retrieving the entry.
     *
     * @return mixed Entry.
     */
    public function get($id);

    /**
     * Returns true if the container can return an entry for the given identifier.
     * Returns false otherwise.
     *
     * `has($id)` returning true does not mean that `get($id)` will not throw an exception.
     * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
     *
     * @param string $id Identifier of the entry to look for.
     *
     * @return bool
     */
    public function has($id);
}

3.2。PSR \集装箱\ ContainerExceptionInterface

<?php
namespace Psr\Container;

/**
 * Base interface representing a generic exception in a container.
 */
interface ContainerExceptionInterface
{
}

3.3。PSR \集装箱\ NotFoundExceptionInterface

<?php
namespace Psr\Container;

/**
 * No entry was found in the container.
 */
interface NotFoundExceptionInterface extends ContainerExceptionInterface
{
}