Example #1
0
 /**
  * Resolve a non-class function argument.
  *
  * @param  ReflectionParameter        $param
  * @param  array                      $params
  * @param  ReflectionFunctionAbstract $func
  *
  * @return mixed
  */
 protected function resolveNonClassArg(ReflectionParameter $param, array $params, ReflectionFunctionAbstract $func)
 {
     $name = '$' . $param->getName();
     if ($params && array_key_exists($name, $params)) {
         $argument = $params[$name];
         if (is_array($argument) && isset($this->factories[$argument[0]])) {
             $argument = $this->callFactory($argument[0], $argument[1]);
         }
         return $argument;
     }
     if ($param->isDefaultValueAvailable()) {
         return $param->getDefaultValue();
     }
     throw Exception\UnresolvableArgumentException::fromReflectionParam($param, $func);
 }
Example #2
0
 /**
  * Add arguments to an existing factory via reflection.
  *
  * @param Definition                      $factory
  * @param ReflectionFunctionAbstract|null $reflectionFunction Optional
  */
 protected static function addReflectionArguments(Definition $factory, ReflectionFunctionAbstract $reflectionFunction = null)
 {
     if (!$reflectionFunction) {
         $callable = $factory->getCallable();
         if (is_array($callable)) {
             $reflectionFunction = new ReflectionMethod($callable[0], $callable[1]);
         } else {
             $reflectionFunction = new ReflectionFunction($callable);
         }
     }
     foreach ($reflectionFunction->getParameters() as $arg) {
         try {
             $name = $arg->getName();
             $required = !$arg->isOptional();
             if ($argClass = $arg->getClass()) {
                 $factory->addClassArgument($name, $argClass->getName(), $required);
             } else {
                 $default = $required ? null : $arg->getDefaultValue();
                 $factory->addScalarArgument($name, null, $required, $default);
             }
         } catch (ReflectionException $re) {
             throw UnresolvableArgumentException::fromReflectionParam($arg, $reflectionFunction, $re);
         }
     }
 }