Пример #1
0
 /**
  * @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;
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * 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;
 }