Как проверить, будет ли параметр Callable возвращать строку с Reflection? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть функция, которая ожидает параметр 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 Ответ

0 голосов
/ 29 сентября 2018

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

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';
}

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

...