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