/** * @param ParamNode $node * @param ReflectionFunctionAbstract $function * @param int $parameterIndex * @return ReflectionParameter */ public static function createFromNode(ParamNode $node, ReflectionFunctionAbstract $function, $parameterIndex) { $param = new self(); $param->name = $node->name; $param->function = $function; $param->isOptional = (bool) $node->isOptional; $param->hasDefaultValue = null !== $node->default; $param->isVariadic = (bool) $node->variadic; $param->isByReference = (bool) $node->byRef; $param->parameterIndex = (int) $parameterIndex; $param->typeHint = (new FindTypeFromAst())->__invoke($node->type, $function->getLocatedSource(), $function instanceof ReflectionMethod ? $function->getDeclaringClass()->getNamespaceName() : $function->getNamespaceName()); if ($param->hasDefaultValue) { $param->parseDefaultValueNode($node->default); } $param->docBlockTypes = (new FindParameterType())->__invoke($function, $node); return $param; }