/** * Converts the given parameter reflection into an information array * * @param ParameterReflection $parameter The parameter to reflect * @param MethodReflection $method The parameter's method * @return array Parameter information array */ protected function convertParameterReflectionToArray(ParameterReflection $parameter, MethodReflection $method = null) { $parameterInformation = [self::DATA_PARAMETER_POSITION => $parameter->getPosition()]; if ($parameter->isPassedByReference()) { $parameterInformation[self::DATA_PARAMETER_BY_REFERENCE] = true; } if ($parameter->isArray()) { $parameterInformation[self::DATA_PARAMETER_ARRAY] = true; } if ($parameter->isOptional()) { $parameterInformation[self::DATA_PARAMETER_OPTIONAL] = true; } if ($parameter->allowsNull()) { $parameterInformation[self::DATA_PARAMETER_ALLOWS_NULL] = true; } $parameterClass = $parameter->getClass(); if ($parameterClass !== null) { $parameterInformation[self::DATA_PARAMETER_CLASS] = $parameterClass->getName(); } if ($parameter->isOptional() && $parameter->isDefaultValueAvailable()) { $parameterInformation[self::DATA_PARAMETER_DEFAULT_VALUE] = $parameter->getDefaultValue(); } if ($method !== null) { $paramAnnotations = $method->isTaggedWith('param') ? $method->getTagValues('param') : []; if (isset($paramAnnotations[$parameter->getPosition()])) { $explodedParameters = explode(' ', $paramAnnotations[$parameter->getPosition()]); if (count($explodedParameters) >= 2) { $parameterType = $this->expandType($method->getDeclaringClass(), $explodedParameters[0]); $parameterInformation[self::DATA_PARAMETER_TYPE] = $this->cleanClassName($parameterType); } } if (!$parameter->isArray()) { $builtinType = $parameter->getBuiltinType(); if ($builtinType !== null) { $parameterInformation[self::DATA_PARAMETER_TYPE] = $builtinType; $parameterInformation[self::DATA_PARAMETER_SCALAR_DECLARATION] = true; } } } if (!isset($parameterInformation[self::DATA_PARAMETER_TYPE]) && $parameterClass !== null) { $parameterInformation[self::DATA_PARAMETER_TYPE] = $this->cleanClassName($parameterClass->getName()); } elseif (!isset($parameterInformation[self::DATA_PARAMETER_TYPE])) { $parameterInformation[self::DATA_PARAMETER_TYPE] = 'mixed'; } return $parameterInformation; }