С подсказкой вызываемого типа в PHP, есть ли веская причина для такого, казалось бы, противоречивого поведения? - PullRequest
0 голосов
/ 05 июля 2019

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

Вот то, к чему я стремлюсь:

function test(callable $callable) {}

// few ways i want to use it:
test(\Foo\Bar::class);
test(function() {
});

И вот тут все начинает разрушаться ...

namespace  Foo;

class Bar {
    public static function __callStatic($method, $args) {
    }
}

теперь этот бит меня не так беспокоит:

... autoload stuff, etc...

echo "\Foo\Bar::class"; // --> \Foo\Bar::class
echo \Foo\Bar::class; // --> \Foo\Bar

но где это становится волосатым для меня, так это:

... autoload stuff, etc...

echo is_callable('\Foo\Bar::class'); // --> true
echo is_callable(\Foo\Bar::class); // --> false

добавление __invoke не помогает, так как мы работаем здесь статически, поэтому у меня есть некоторые идеи, кроме создания резольвера.

ЛюбойИдеи?

РЕДАКТИРОВАТЬ На самом деле, это просто случай, когда в кавычках часть ':: class' интерпретируется как метод, который может быть удовлетворен __callStatic, ине так ли PHP обрабатывает суффикс :: class для разрешения?

...