/** * @param ParameterReflection $reflectionParameter * @return ParameterGenerator */ public static function fromReflection(ParameterReflection $reflectionParameter) { $param = new ParameterGenerator(); $param->setName($reflectionParameter->getName()); if ($reflectionParameter->isArray()) { $param->setType('array'); } elseif (method_exists($reflectionParameter, 'isCallable') && $reflectionParameter->isCallable()) { $param->setType('callable'); } else { $typeClass = $reflectionParameter->getClass(); if ($typeClass) { $parameterType = $typeClass->getName(); $currentNamespace = $reflectionParameter->getDeclaringClass()->getNamespaceName(); if (!empty($currentNamespace) && substr($parameterType, 0, strlen($currentNamespace)) == $currentNamespace) { $parameterType = substr($parameterType, strlen($currentNamespace) + 1); } else { $parameterType = '\\' . trim($parameterType, '\\'); } $param->setType($parameterType); } } $param->setPosition($reflectionParameter->getPosition()); if ($reflectionParameter->isOptional()) { $param->setDefaultValue($reflectionParameter->getDefaultValue()); } $param->setPassedByReference($reflectionParameter->isPassedByReference()); return $param; }
/** * @param ParameterReflection $reflectionParameter * @return ParameterGenerator */ public static function fromReflection(ParameterReflection $reflectionParameter) { $param = new ParameterGenerator(); $param->setName($reflectionParameter->getName()); if ($reflectionParameter->isArray()) { $param->setType('array'); } elseif (method_exists($reflectionParameter, 'isCallable') && $reflectionParameter->isCallable()) { $param->setType('callable'); } else { $typeClass = $reflectionParameter->getClass(); if ($typeClass) { $param->setType($typeClass->getName()); } } $param->setPosition($reflectionParameter->getPosition()); if ($reflectionParameter->isOptional()) { $param->setDefaultValue($reflectionParameter->getDefaultValue()); } $param->setPassedByReference($reflectionParameter->isPassedByReference()); return $param; }
/** * @override - uses `static` to instantiate the parameter * * {@inheritDoc} */ public static function fromReflection(ParameterReflection $reflectionParameter) { /* @var $param self */ $param = new static(); $param->setName($reflectionParameter->getName()); $param->setPosition($reflectionParameter->getPosition()); $type = self::extractParameterType($reflectionParameter); if (null !== $type) { $param->setType($type); } self::setOptionalParameter($param, $reflectionParameter); $param->setPassedByReference($reflectionParameter->isPassedByReference()); return $param; }
/** * @param ParameterReflection $reflectionParameter * @return ParameterGenerator */ public static function fromReflection(ParameterReflection $reflectionParameter) { $param = new ParameterGenerator(); $param->setName($reflectionParameter->getName()); if ($type = self::extractFQCNTypeFromReflectionType($reflectionParameter)) { $param->setType($type); } $param->setPosition($reflectionParameter->getPosition()); $variadic = method_exists($reflectionParameter, 'isVariadic') && $reflectionParameter->isVariadic(); $param->setVariadic($variadic); if (!$variadic && $reflectionParameter->isOptional()) { try { $param->setDefaultValue($reflectionParameter->getDefaultValue()); } catch (\ReflectionException $e) { $param->setDefaultValue(null); } } $param->setPassedByReference($reflectionParameter->isPassedByReference()); return $param; }
/** * Get parameter description * * @param ParameterReflection $param * @return string|null */ public function getParamDescription(ParameterReflection $param) { $docBlock = $param->getDeclaringFunction()->getDocBlock(); $docBlockLines = explode("\n", $docBlock->getContents()); $pattern = "/\\@param\\s+([\\w\\\\_\\[\\]\\|]+)\\s+(\\\${$param->getName()})\\s(.*)/"; $matches = []; foreach ($docBlockLines as $line) { if (preg_match($pattern, $line, $matches)) { return $matches[3]; } } }
/** * Get the parameter type * * @param ParameterReflection $param * @return string */ public function getParamType(ParameterReflection $param) { $type = $param->getType(); if ($type == 'array') { // try to determine class, if it's array of objects $docBlock = $param->getDeclaringFunction()->getDocBlock(); $pattern = "/\\@param\\s+([\\w\\\\_]+\\[\\])\\s+\\\${$param->getName()}\n/"; if (preg_match($pattern, $docBlock->getContents(), $matches)) { return $matches[1]; } return "{$type}[]"; } return $type; }