Maison >cadre php >Laravel >Qu'est-ce que l'injection de dépendances et l'inversion de contrôle dans Laravel

Qu'est-ce que l'injection de dépendances et l'inversion de contrôle dans Laravel

WBOY
WBOYoriginal
2022-06-06 10:44:082394parcourir

Dans Laravel, l'injection de dépendances est un comportement d'injection de composants dans une application, qui est une déclaration explicite de dépendances ; l'inversion de contrôle est un principe de conception de programmation orientée objet, utilisé pour réduire le couplage entre codes informatiques, une classe de transferts son contrôle sur un autre objet, et la dépendance entre classes est résolue par cet objet.

Qu'est-ce que l'injection de dépendances et l'inversion de contrôle dans Laravel

L'environnement d'exploitation de cet article : système Windows 10, Laravel version 6, ordinateur Dell G3.

Qu'est-ce que l'injection de dépendances et l'inversion de contrôle de Laravel

1. Injection de dépendances

Le terme injection de dépendances est un terme proposé par Martin Fowler, qui est l'acte d'injecter des composants dans une application. Comme l'a dit Ward Cunningham :

L'injection de dépendances est un élément clé de l'architecture agile.

Exemple :

class UserProvider{
    protected $connection;
 
    public function __construct(){
        $this->connection = new Connection;
    }
 
    public function retrieveByCredentials( array $credentials ){
        $user = $this->connection
                        ->where( 'email', $credentials['email'])
                        ->where( 'password', $credentials['password'])
                        ->first();
 
        return $user;
    }
}

Si vous souhaitez tester ou maintenir cette classe, vous devez accéder à l'instance de base de données pour effectuer certaines requêtes. Pour éviter d'avoir à faire cela, vous pouvez découpler cette classe des autres classes, vous disposez de l'une des trois options pour injecter la classe Connection sans l'utiliser directement.

2. Inversion de contrôle

L'inversion de contrôle (en abrégé IoC) est un principe de conception en programmation orientée objet qui peut être utilisé pour réduire le couplage entre les codes informatiques. La méthode la plus courante est appelée Dependency Injection (DI), et l’autre méthode est appelée « Dependency Lookup ». Par inversion de contrôle, lorsqu'un objet est créé, une entité externe qui contrôle tous les objets du système lui transmet la référence de l'objet dont elle dépend.

Pour faire simple, une classe cède son contrôle à un autre objet, et les dépendances entre classes sont résolues par cet objet. L'injection de dépendances est une déclaration explicite de dépendances, tandis que la recherche de dépendances résout les dépendances via la recherche.

L'inversion du contrôle n'est pas une méthode, mais une idée de conception. Laravel est la même que le framework Spring. Il n'y a pas lieu de s'inquiéter de l'inversion du nom. L'explication est que les objets traditionnels prennent activement les attributs attribués au nom. L'objet, et dans le cadre, tout ce que nous faisons est d'exploiter le conteneur. Le conteneur trouvera automatiquement les attributs requis par mappage et les attribuera. L'objet n'accepte que passivement les objets dépendants. Examinons le problème de la manière d'obtenir les attributs de l'objet.

Connaissances étendues :

Utilisation dans Laravel

Injecter une classe :

App::bind('foo', function($app){    return new FooBar;
});

Cet exemple signifie créer une classe avec l'alias foo, et l'instanciation réelle lors de son utilisation est FooBar.

La façon d'utiliser cette classe est la suivante :

$value = App::make('foo');

$value est en fait un objet FooBar.

Si vous souhaitez utiliser le mode singleton pour instancier une classe, alors utilisez :

App::singleton('foo', function(){    return new FooBar;
});

De cette façon, le même objet sera instancié à chaque fois.

【Recommandation associée : tutoriel vidéo laravel

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!

Déclaration:
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