/** * 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); }
/** * 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); } } }