/**
  * @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;
    }
Example #3
0
 /**
  * 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;
 }
Example #5
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;
 }