Maison >développement back-end >tutoriel php >À propos de l'injection de dépendances en PHP
Cet article présente principalement des exemples de code d'inversion de dépendance PHP (Dependency Injection). Cet article fournit uniquement du code d'implémentation. Les amis dans le besoin peuvent se référer à
Classe d'implémentation :
<?php class Container { protected $setings = array(); public function set($abstract, $concrete = null) { if ($concrete === null) { $concrete = $abstract; } $this->setings[$abstract] = $concrete; } public function get($abstract, $parameters = array()) { if (!isset($this->setings[$abstract])) { return null; } return $this->build($this->setings[$abstract], $parameters); } public function build($concrete, $parameters) { if ($concrete instanceof Closure) { return $concrete($this, $parameters); } $reflector = new ReflectionClass($concrete); if (!$reflector->isInstantiable()) { throw new Exception("Class {$concrete} is not instantiable"); } $constructor = $reflector->getConstructor(); if (is_null($constructor)) { return $reflector->newInstance(); } $parameters = $constructor->getParameters(); $dependencies = $this->getDependencies($parameters); return $reflector->newInstanceArgs($dependencies); } public function getDependencies($parameters) { $dependencies = array(); foreach ($parameters as $parameter) { $dependency = $parameter->getClass(); if ($dependency === null) { if ($parameter->isDefaultValueAvailable()) { $dependencies[] = $parameter->getDefaultValue(); } else { throw new Exception("Can not be resolve class dependency {$parameter->name}"); } } else { $dependencies[] = $this->get($dependency->name); } } return $dependencies; } }
Exemple de mise en œuvre :
<?php require 'container.php'; interface MyInterface{} class Foo implements MyInterface{} class Bar implements MyInterface{} class Baz { public function __construct(MyInterface $foo) { $this->foo = $foo; } } $container = new Container(); $container->set('Baz', 'Baz'); $container->set('MyInterface', 'Foo'); $baz = $container->get('Baz'); print_r($baz); $container->set('MyInterface', 'Bar'); $baz = $container->get('Baz'); print_r($baz);Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de contenu connexe, veuillez faire attention. au site Web PHP chinois ! Recommandations associées :
À propos du développement des modules d'enregistrement PHP et jQuery
À propos de PHP
– Introduction à la méthode de stockage de données EasyUI DataGrid
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!