PSR 11 - Container Interface

1 h Niveau 7

Objectif du PSR 11

L’objectif du PSR 11 est de créer une interface commune pour les conteneurs d’injection de dépendances et de standardiser la façon dont les frameworks et les librairies l’utilisent. Le conteneur de dépendances est utilisé pour obtenir des objets en paramètre d’entrée d'une fonction.

L’implementor dans ce cours doit être interprété comme quelque chose qui implémente le ContainerInterface dans une librairie ou framework. Les utilisateurs de conteneur d’injection de dépendances (DIC) sont appelés “user”.

Identifiant d’entrée

Un identifiant d’entrée est une chaîne d’au moins 1 caractère qui identifie de manière unique un élément dans un conteneur. Un identifiant d’entrée est une chaîne opaque, donc les appelants ne devraient pas supposer que la structure de la chaîne porte une quelconque signification sémantique.

Lecture d’un conteneur

Le Psr\Container\ContainerInterface expose 2 méthodes qui sont get et has.

get prend un identifiant d’entrée en paramètre, qui doit être une chaîne de caractère, get peut renvoyer n’importe quelle valeur ou lancer une NotFoundExeptionInterface si l'identifiant connu du conteneur fait 2 appels successifs à get avec le même identifiant, ce qui devrait retourner la même valeur. Cependant, selon l’implementor conception et/ou la “user” configuration, des valeurs différentes peuvent être retournées, donc “user” ne doit pas compter sur l’obtention de la même valeur sur 2 appels successifs.

has prend un identifiant d’entrée en paramètre, qui doit être une chaîne de caractère, has retourne “true” si l'identifiant d’entrée est connu de conteneur ou alors has renvoie “false” s’il ne l’est pas. Si has($id) renvoie false alors get($id) lance une NotFoundExceptionInterface.

Les exceptions

Les exceptions directement levées par le conteneur implémente le PSR\Container\ContainerExceptionInterface. Un appel à la méthode get avec un identifiant existant doit lancer un Psr\Container\NotFoundExceptionInterface.

Les packages

Les interfaces et les classes ainsi que les exceptions sont fournies dans le cadre du package psr/container. Les packages qui fournissent une implémentation de conteneur PSR doivent déclarer qu’ils fournissent des fichiers psr/container-implementation 1.0.0.

Les interfaces

Le Psr\Container\ContainerInterface :

<?php
namespace Psr\Container;

/**
 * Décrit l’interface d’un container
 */
interface ContainerInterfaces
{
    /**
     * Recherche une entrée du container par son identifiant et la renvoie
     *
     * @param string $id Identifiant de l’entrée à rechercher
     *
     * @throws NotFoundExceptionInterface Aucune entrée trouvée
     * @throws ContainerExceptionInterface Erreur lors de la récupération de l’entrée
     *
     * @return mixed Entry.
     */
    public function get($id);

    /**
     * Returns true Si le container peut retourner une entrée pour l’identifiant donné
     * Returns false autrement
     *
     * `has($id)` retourne true ne signifie pas que `get($id)` ne lèvera pas d'exception
     * Cela signifie que `get($id)` ne lancera pas une `NotFoundExceptionInterface`.
     *
     * @param string $id Identifiant de l’entrée à rechercher
     *
     * @return bool
     */
    public function has($id);
}
?>

Le Psr\Container\ContainerExceptionInterface :

<?php
namespace Psr\Container;

/**
 * Interface de base représentant une exception générique dans un container
 */
interface ContainerExceptionInterface
{
}

Le Psr\Container\NotFoundExceptionInterface :

<?php
namespace Psr\Container;

/**
 * Aucune entrée n’a été trouvé dans le container
 */
interface NotFoundExceptionInterface extends ContainerExceptionInterface
{
}
logo discord

Besoin d'aide ?

Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !

En savoir plus