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

PHP检查函数是否可调用但不可调用对象?,php,function,Php,Function,我想要一个自定义的是\u callable\u func函数,它可以正确捕获函数和闭包,但忽略实现\u invoke方法的自定义对象 例如: function test1() { // .. } class MyObject { public function test2() { // .. } } class MyInvokableObject { public function __invoke() { // .. } } $t

我想要一个自定义的
是\u callable\u func
函数,它可以正确捕获函数和闭包,但忽略实现
\u 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);
}
但是它不起作用,因为,例如,匿名函数就是对象。 可能吗


PS:如果建议的解决方案向后兼容PHP5.3,我们将不胜感激。您可以检查可调用对象的类型,闭包将是
闭包的一个实例

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

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

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

正中目标!正中目标!