Ejemplo n.º 1
0
 /**
  * Creates an instance of the class and injects dependencies..
  *
  * @param ClassDefinition $classDefinition
  * @param array           $parameters      Optional parameters to use to create the instance.
  *
  * @throws DefinitionException
  * @throws DependencyException
  * @return object
  *
  * @todo Make private once PHP-DI supports PHP > 5.4 only
  */
 public function createInstance(ClassDefinition $classDefinition, array $parameters)
 {
     if (!class_exists($classDefinition->getClassName()) && !interface_exists($classDefinition->getClassName())) {
         throw DefinitionException::create($classDefinition, sprintf("the class %s doesn't exist", $classDefinition->getClassName()));
     }
     $classReflection = new ReflectionClass($classDefinition->getClassName());
     if (!$classReflection->isInstantiable()) {
         throw DefinitionException::create($classDefinition, sprintf("%s is not instantiable", $classDefinition->getClassName()));
     }
     $constructorInjection = $classDefinition->getConstructorInjection();
     try {
         $instance = $this->injectConstructor($classDefinition, $classReflection, $constructorInjection, $parameters);
         $this->injectMethodsAndProperties($classDefinition, $instance, $classDefinition);
     } catch (NotFoundException $e) {
         throw new DependencyException(sprintf("Error while injecting dependencies into %s: %s", $classReflection->getName(), $e->getMessage()), 0, $e);
     }
     return $instance;
 }
Ejemplo n.º 2
0
 /**
  * Fixes parameters indexed by the parameter name -> reindex by position.
  *
  * This is necessary so that merging definitions between sources is possible.
  *
  * @param ClassDefinition $definition
  * @param string          $method
  * @param array           $parameters
  * @return array
  */
 private function fixParameters(ClassDefinition $definition, $method, $parameters)
 {
     $fixedParameters = array();
     foreach ($parameters as $index => $parameter) {
         // Parameter indexed by the parameter name, we reindex it with its position
         if (is_string($index)) {
             $callable = array($definition->getClassName(), $method);
             $reflectionParameter = new \ReflectionParameter($callable, $index);
             $index = $reflectionParameter->getPosition();
         }
         $fixedParameters[$index] = $parameter;
     }
     return $fixedParameters;
 }
Ejemplo n.º 3
0
 private function assertClassExists(ClassDefinition $classDefinition)
 {
     if (!class_exists($classDefinition->getClassName()) && !interface_exists($classDefinition->getClassName())) {
         throw DefinitionException::create($classDefinition, sprintf("Entry %s cannot be resolved: class %s doesn't exist", $classDefinition->getName(), $classDefinition->getClassName()));
     }
 }