我想要一个自定义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);
}