确定变量在 PHP 中是否为有效闭包

2022-08-30 13:50:21

使用以下函数:

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

除了匿名闭包函数之外,这还能为其他任何内容返回 true 吗?如果是这样,确定变量是否是闭包的正确方法是什么?

非常感谢


答案 1

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

function is_closure($t) {
    return $t instanceof \Closure;
}

所有匿名函数都表示为PHP中的该类型的对象。(回到上面的注释,碰巧实现了该方法。Closure__invoke()


答案 2

我认为你可以使用,尽管手册指出这不应该被依赖。我想它现在有效instanceof Closure

匿名函数当前是使用闭包类实现的。这是一个实现细节,不应依赖。

更新关闭手册页面已更新了有关此方面的指南。现在看来,这种行为是可以依赖的。

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


推荐