PHP检查函数是否可调用但不可调用的对象



我想要一个自定义is_callable_func函数,它可以正确捕获函数和闭包,但忽略实现__invoke方法的自定义对象。

示例:

function test1()
{
// ..
}
class MyObject
{
public function test2()
{
// ..
}
}
class MyInvokableObject
{
public function __invoke()
{
// ..
}
}
$test3 = function() {
// ..
};

echo is_callable_func('test1'); // true
echo is_callable_func([new MyObject(), 'test2']); // true
echo is_callable_func($test3); // true
echo is_callable_func(new MyInvokableObject()); // must return false!!

我尝试使用:

function is_callable_func($f)
{
return is_callable($f) && !is_object($f);
}

但它不起作用,因为例如,匿名函数就是对象。可能的

附言:如果提议的解决方案向后兼容php5.3,我将不胜感激

您可以检查可调用对象的类型,闭包将是Closure的实例。。。

function is_callable_func($f)
{
return is_callable($f) && ( !is_object($f) || $f instanceof Closure);
}

最新更新