包含匿名函数的变量是一个对象并且是可调用的

时间:2016-09-27 08:38:09

标签: php oop closures anonymous-function

令我困惑的是,如果我只为一个函数指定一个函数,变量如何成为可调用的对象。

如果我执行此代码段:

$a = function () {};

if (is_object($a)) {
    echo "is Object\n";
}

if (is_callable($a)) {
    echo "is callable\n";
}

输出:

is Object
is callable

1 个答案:

答案 0 :(得分:2)

对象可以定义magic method __invoke,使对象可调用。具有这种方法的对象是对象都可以调用。匿名函数在引擎盖下使用这种机制;匿名函数实际上是Closure的一个实例,尽管它们有点特殊:

  

除了此处列出的方法外,此类还具有__invoke方法。这是为了与实现调用魔术的其他类保持一致,因为此方法不用于调用函数。