この記事では、主に PHP の依存関係反転 (Dependency Injection) のコード例を紹介します。必要な方は、
#実装クラスを参照してください。 ##実装例:
<?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; } }
以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語に注目してください。 Webサイト! 関連する推奨事項:
PHP および jQuery 登録モジュールの開発についてPHP について
– EasyUI DataGrid データストレージメソッドの紹介
以上がPHP での依存関係の挿入についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。