/** * @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; }
/** * Retrieves the type of a reflection parameter (null if none is found) * * @param ParameterReflection $reflectionParameter * * @return string|null */ private static function extractParameterType(ParameterReflection $reflectionParameter) { if ($reflectionParameter->isArray()) { return 'array'; } if (method_exists($reflectionParameter, 'isCallable') && $reflectionParameter->isCallable()) { return 'callable'; } if ($typeClass = $reflectionParameter->getClass()) { return $typeClass->getName(); } return null; }
/** * For ancient PHP versions (yes, you should upgrade to 7.0): * * @param ParameterReflection $reflectionParameter * * @return string|null */ private static function prePhp7ExtractFQCNTypeFromReflectionType(ParameterReflection $reflectionParameter) { if ($reflectionParameter->isCallable()) { return 'callable'; } if ($reflectionParameter->isArray()) { return 'array'; } if ($class = $reflectionParameter->getClass()) { return $class->getName(); } return null; }
/** * Check if parameter is an array. * * @param ParameterReflection $param * @return bool */ protected function _isArrayParam($param) { $isArray = $param->isArray(); $docBlock = $param->getDeclaringFunction()->getDocBlock(); /** If array type is not set explicitly in the method interface, examine annotations */ if (!$isArray && $docBlock) { /** This pattern will help to skip parameters declarations which precede to the current one */ $precedingParamsPattern = str_repeat('.*\\@param.*', $param->getPosition()); $paramType = str_replace('\\', '\\\\', $param->getType()); if (preg_match("/.*{$precedingParamsPattern}\\@param\\s+({$paramType}\\[\\]).*/is", $docBlock->getContents())) { $isArray = true; } } return $isArray; }