使用PHP可调用类型提示时,是否存在这种看似不一致的行为的正当理由?

时间:2019-07-05 06:38:13

标签: php type-hinting callable

我有一个需要“可调用”参数的方法。类型提示。根据上下文,我希望能够提供匿名函数或类。我曾在某些框架中看到过类似的事情,尽管它们经常使用各种类型的解析器和不太严格的类型提示。

这是我想要的目标:

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后缀的方式:分辨率?

0 个答案:

没有答案