У меня есть функция, которая ожидает 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;
}
}
Может быть, вам нужно что-то вроде этого:
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';
}
Это так просто, как это:
Интерпретатор не может знать тип возвращаемых данных функции, не вызывая ее, если вы сначала не скажете интерпретатору, что должно возвращать данную функцию.
Других решений пока нет …