Example #1
0
 /**
  * @return string|NULL
  */
 public static function getReturnType(\ReflectionFunctionAbstract $func)
 {
     if (PHP_VERSION_ID >= 70000 && $func->hasReturnType()) {
         $type = PHP_VERSION_ID >= 70100 ? $func->getReturnType()->getName() : (string) $func->getReturnType();
         return strtolower($type) === 'self' ? $func->getDeclaringClass()->getName() : $type;
     }
     $type = preg_replace('#[|\\s].*#', '', (string) self::parseAnnotation($func, 'return'));
     if ($type) {
         return $func instanceof \ReflectionMethod ? self::expandClassName($type, $func->getDeclaringClass()) : ltrim($type, '\\');
     }
 }
Example #2
0
 /**
  * @param ReflectionFunctionAbstract $function
  * @return string
  */
 private function _scanFunction(ReflectionFunctionAbstract $function, $class_name = "")
 {
     $params = [];
     foreach ($function->getParameters() as $param) {
         /* @var ReflectionParameter $param */
         $type = "";
         $param_name = "\$" . $param->name;
         if ($param->getClass()) {
             $type = $param->getClass()->name;
         } elseif ($param->hasType()) {
             $type = $param->getType();
         } elseif ($param->isArray()) {
             $type = "Array";
         } elseif ($param->isCallable()) {
             $type = "Callable";
         }
         if ($param->isVariadic()) {
             $param_name = "..." . $param_name;
         }
         if ($type) {
             $param_name = $type . " " . $param_name;
         }
         if ($param->isOptional()) {
             $params[] = "[ " . $param_name . " ]";
         } else {
             $params[] = $param_name;
         }
     }
     if ($function->hasReturnType()) {
         $return = " : " . $function->getReturnType();
     } else {
         $return = "";
     }
     $declare = $function->name;
     if ($function instanceof ReflectionFunction) {
         $declare = "function {$function->name}";
     } elseif ($function instanceof ReflectionMethod) {
         $mods = implode(' ', Reflection::getModifierNames($function->getModifiers()));
         if ($function->class !== $class_name) {
             $declare = "  method {$mods} {$function->class}::{$function->name}";
         } else {
             $declare = "  method {$mods} {$function->name}";
         }
     }
     return "{$declare}(" . implode(", ", $params) . "){$return}";
 }