Как проверить, будет ли параметр Callable возвращать строку с Reflection?

У меня есть функция, которая ожидает Callable параметр. Я хочу определить, что этот вызываемый элемент возвращает строку, и, если это не так, следует выдать исключение.

Я пытался найти это, но не повезло. Предоставляет ли API отражения PHP такую ​​функциональность? Я не хочу запускать метод и посмотреть, действительно ли он возвращает строку.

Пример того, что мне нужно:

class MyClass
{
protected static $overrider = null;

public static function setOverrider(Callable $callback)
{
// Pseudo code start
if (!$callback returns string) {
throw new \Exception('Wasnt a string!');
}
// Pseudo code end

self::$overrider = $callback;
}
}

1

Решение

Может быть, вам нужно что-то вроде этого:

class MyClass
{
protected static $overrider = null;

public static function setOverrider(Callable $callback)
{
$reflection = new ReflectionFunction($callback);
if ('string' != $reflection->getReturnType()) {
throw new \Exception('Wasnt a string!');
}

self::$overrider = $callback;
}
}

Итак, как я уже упоминал ранее в комментариях: вам нужно объявить возвращаемый тип вашего вызываемого (который является Функция PHP7 +). Это ДОЛЖНО, иначе не будет работать

Как это:

function my_function(): string
{
return 'hello';
}

или как это, если вы предпочитаете анонимные функции (закрытие):

$my_callable = function(): string {
return 'hello';
}

Это так просто, как это:
Интерпретатор не может знать тип возвращаемых данных функции, не вызывая ее, если вы сначала не скажете интерпретатору, что должно возвращать данную функцию.

2

Другие решения

Других решений пока нет …