Maison >développement back-end >tutoriel php >Introduction détaillée à l'injection de dépendances en PHP

Introduction détaillée à l'injection de dépendances en PHP

王林
王林original
2019-11-08 11:42:002378parcourir

Introduction détaillée à l'injection de dépendances en PHP

Principe de l'injection de dépendances :

L'injection de dépendances est une méthode qui nous permet de nous découpler des dépendances codées en dur, de sorte qu'au moment de l'exécution ou Modèles de conception de logiciels pouvant être modifiés au moment de la compilation. En bref, cela nous permet d’appeler plus facilement la classe associée dans la méthode class.

Explication avec exemples :

Supposons qu'il existe une classe comme celle-ci :

class Test
{
 public function index(Demo $demo,Apple $apple){
  $demo->show();
  $apple->fun();
 }
}

Si vous souhaitez utiliser la méthode d'indexation, nous devons le faire :

$demo = new Demo();
$apple = new Apple();
$obj = new Test();
$obj->index($demo,$apple);

Est-ce gênant d'appeler la méthode index ? La méthode ci-dessus n'a que deux paramètres. S'il y a plus de paramètres, nous devons instancier plus d'objets en tant que paramètres. Si nous introduisons "l'injection de dépendances", la méthode d'appel sera la suivante.

$obj = new dependencyInjection();
$obj->fun("Test","index");

Dans notre exemple ci-dessus, la méthode d'indexation de la classe Test dépend des classes Demo et Apple.

"L'injection de dépendances" consiste à identifier les classes dont toutes les méthodes "dépendent", puis à les "injecter" dans la méthode en tant que valeurs de paramètres.

La classe dependencyInjection termine cette tâche d'injection de dépendances.

<?php
/**
 * Created by PhpStorm.
 * User: zhezhao
 * Date: 2016/8/10
 * Time: 19:18
 */
class dependencyInjection
{
 function fun($className,$action){
  $reflectionMethod = new ReflectionMethod($className,$action);
  $parammeters = $reflectionMethod->getParameters();
  $params = array();
  foreach ($parammeters as $item) {
   preg_match(&#39;/> ([^ ]*)/&#39;,$item,$arr);
   $class = trim($arr[1]);
   $params[] = new $class();
  }
  $instance = new $className();
  $res = call_user_func_array([$instance,$action],$params);
  return $res;
 }
}

Dans le framework mvc, le contrôle utilise parfois plusieurs modèles. Si nous utilisons l'injection de dépendances et le chargement automatique des classes, nous pouvons l'utiliser comme suit.

public function index(UserModel $userModel,MessageModel $messageModel){
 $userList = $userModel->getAllUser();
 $messageList = $messageModel->getAllMessage();
}

Tutoriel recommandé : Tutoriel vidéo PHP

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