Introduction détaillée à l'injection de dépendances PHP (avec exemples)

不言
Libérer: 2023-04-05 15:50:02
avant
2201 Les gens l'ont consulté

Cet article vous apporte une introduction détaillée à l'injection de dépendances PHP (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Injection de dépendances

Pensée traditionnelle

Lorsqu'une application utilise une classe Foo, elle créera la classe Foo et appellera les méthodes de la classe Foo.
Si une classe Bar est requise dans cette méthode, la classe Bar sera créée et la méthode de la classe Bar sera appelée.
Si cette méthode nécessite une classe Bim, elle créera la classe Bim puis effectuera d'autres travaux.

/**
*  Foo
*/
class Foo 
{

    public function doSomething($value='')
    {
        # code...
        $Bar = new Bar();
        $Bar->doSomething();
        echo 'Foo doSomething','<br />' ;
    }
}

/**
*  Bar
*/
class Bar 
{
    

    public function doSomething($value='')
    {
        # code...
        $Bim = new Bim();
        $Bim->doSomething();
        echo 'Bar doSomething','<br />' ;
    }
}

/**
* Bim
*/
class Bim
{
    

    public function doSomething($value='')
    {
        # code...
        echo 'Bim doSomething','<br />'  ;
    }
}

$doSomething = new Foo();
$doSomething->doSomething();
Copier après la connexion

Injection de dépendances

L'application utilise la classe Foo, la classe Foo a besoin de la classe Bar,
La classe Bar a besoin de la classe Bim, puis créez d'abord la classe Bim, puis créez la classe Bar et injectez Bim, créez la classe Foo et injectez la classe Bar
Ensuite, appelez la méthode Foo, Foo appelle la méthode Bar, puis effectuez d'autres travaux.

/**
* Bim2
*/
class Bim2 
{
    
    public function doSomething($value='')
    {
        # code...
        echo 'Bim2 doSomething','<br />' ;
    }

}

/**
*  Bar2
*/
class Bar2
{

    private $bim2 ;

    public function __construct(Bim2 $bim2)
    {
        # code...
        $this->bim2 = $bim2 ;
    }

    public function doSomething($value='')
    {
        # code...
        $this->bim2->doSomething();
        echo "Bar2 doSomething",'<br />';
    }
}

/**
* Foo
*/
class Foo2
{
    
    private $bar2 ;
    public function __construct(Bar2 $bar2)
    {
        # code...
        $this->bar2 = $bar2 ;
    }

    public function doSomething($value='')
    {
        # code...
        $this->bar2->doSomething();
        echo "Foo2 doSomething",'<br />';
    }
}

$doSomething2 = new Foo2(new Bar2(new Bim2()));
$doSomething2->doSomething();
Copier après la connexion

C'est le modèle d'inversion de contrôle. Le contrôle des dépendances est inversé jusqu'au début de la chaîne d'appel. De cette façon, vous avez un contrôle total sur les dépendances et contrôlez le comportement de votre programme en ajustant les différents objets injectés.
Par exemple, la classe Foo utilise memcache, et vous pouvez utiliser redis à la place sans modifier le code de la classe Foo.
L'idée derrière l'utilisation d'un conteneur d'injection de dépendances est que si l'application a besoin d'obtenir la classe Foo, elle récupère la classe Foo du conteneur, le conteneur crée la classe Bim, puis crée la classe Bar et injecte Bim, puis crée la classe Foo et injecte Bar. L'application appelle la méthode Foo, Foo appelle la méthode Bar, puis effectue d'autres travaux

Extension : le conteneur est responsable de l'instanciation, de l'injection des dépendances, du traitement des dépendances, etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!