/** * @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; }
/** * fromReflection() * * @param ReflectionParameter $reflectionParameter * @return ParameterGenerator */ public static function fromReflection(ParameterReflection $reflectionParameter) { $param = new ParameterGenerator(); $param->setName($reflectionParameter->getName()); if ($reflectionParameter->isArray()) { $param->setType('array'); } else { $typeClass = $reflectionParameter->getClass(); if ($typeClass !== null) { $param->setType($typeClass->getName()); } } $param->setPosition($reflectionParameter->getPosition()); if ($reflectionParameter->isOptional()) { $param->setDefaultValue($reflectionParameter->getDefaultValue()); } $param->setPassedByReference($reflectionParameter->isPassedByReference()); return $param; }
/** * 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; }