令我困惑的是,如果我只为一个函数指定一个函数,变量如何成为可调用的对象。
如果我执行此代码段:
$a = function () {};
if (is_object($a)) {
echo "is Object\n";
}
if (is_callable($a)) {
echo "is callable\n";
}
输出:
is Object
is callable
答案 0 :(得分:2)
对象可以定义magic method __invoke
,使对象可调用。具有这种方法的对象是对象和都可以调用。匿名函数在引擎盖下使用这种机制;匿名函数实际上是Closure
的一个实例,尽管它们有点特殊:
除了此处列出的方法外,此类还具有
__invoke
方法。这是为了与实现调用魔术的其他类保持一致,因为此方法不用于调用函数。