public static function getTypeHint(\ReflectionFunctionAbstract
$r, \ReflectionParameter
$p = null, bool
$noBuiltin = false
): ?string
{ if ($p instanceof \ReflectionParameter
) { $type =
$p->
getType();
} else { $type =
$r->
getReturnType();
} if (!
$type) { return null;
} return self::
getTypeHintForType($type,
$r,
$noBuiltin);
} private static function getTypeHintForType(\ReflectionType
$type, \ReflectionFunctionAbstract
$r, bool
$noBuiltin): ?string
{ $types =
[];
$glue = '|';
if ($type instanceof \ReflectionUnionType
) { $reflectionTypes =
$type->
getTypes();
} elseif ($type instanceof \ReflectionIntersectionType
) { $reflectionTypes =
$type->
getTypes();
$glue = '&';
}