如果变量是PHP中的有效闭包,则确定

Sil*_*gon 26 php reflection closures

使用以下功能:

function is_closure($t) { return ( !is_string($t) && is_callable($t)); }

除了匿名闭包函数之外,这可以为其他任何东西返回true吗?如果是这样,如果变量是闭包,那么确定的正确方法是什么?

非常感谢

mar*_*rio 52

检查回调是否是实际闭包的最确定的方法是:

function is_closure($t) {
    return $t instanceof Closure;
}
Run Code Online (Sandbox Code Playgroud)

所有匿名函数都表示为ClosurePHP 中的类型对象.(回到上面的评论,碰巧实现了这个__invoke()方法.)

  • 您不需要执行`is_object($ t)`,对非对象执行`instanceof`将始终返回false. (13认同)
  • 让我吵了一两分钟......如果你的代码是命名空间的,请确保转义\ Closure以返回全局命名空间. (4认同)

Phi*_*hil 15

我想你可以使用instanceof Closure虽然手动状态这应该不能依赖.我想它现在有效.

目前使用Closure类实现匿名函数.这是一个实现细节,不应该依赖.

更新 Closure 手册页已更新其相关指南.现在似乎可以依赖这种行为.

在PHP 5.3中实现的匿名函数产生这种类型的对象.这个事实过去被认为是一个实现细节,但现在可以依赖它.