DependencyInjector.php 908 B

123456789101112131415161718192021222324252627282930313233
  1. <?php
  2. class DependencyInjector {
  3. private $_dependencyArray=array();
  4. public function Register($interface, $class) {
  5. if (isset(class_implements($class)[$interface])) {
  6. $this->_dependencyArray[$interface]=$class;
  7. } else
  8. throw new Exception("Class '$class' does not implement interface '$interface'");
  9. }
  10. public function Resolve($interface) {
  11. $class=new ReflectionClass($this->_dependencyArray[$interface]);
  12. $constructor=$class->getConstructor();
  13. $callArgs=array();
  14. if ($constructor!=null){
  15. $methodParams=$constructor->getParameters();
  16. foreach ($methodParams as $methodParam) {
  17. $index=$methodParam->getPosition();
  18. $type=$methodParam->getClass();
  19. $callArgs[$index]=$this->Resolve($type->getName());
  20. }
  21. $item=$class->newInstanceArgs($callArgs);
  22. }else{
  23. $item=new $this->_dependencyArray[$interface];
  24. }
  25. #$item->DependencyInjector=$this;
  26. return $item;
  27. }
  28. }