如果call_user_func应该返回false怎么办


What if call_user_func is supposed to return false?

我用call_user_func调用的函数应该返回FALSE。那么,如果可调用项无效,我该如何检测错误呢?

(附带说明:为什么他们不让它抛出异常而不是返回错误代码?或者有办法"捕捉"错误吗?我有一个错误句柄。我应该让它为我抛出异常吗?)

如果要检查要调用的函数或方法是否真的存在,可以在调用call_user_func之前使用is_callable。你可以将整个东西包装在一个函数中以便于重用:

function call_uf($fn) {
    if(is_callable($fn)) {
        return call_user_func($fn);
    } else {
        throw new Exception("$fn is not callable");
    }
}

您在评论中询问了为什么PHP会引发错误而不是使用异常。我认为这是因为只有在PHP5中引入了异常,所以大多数PHP函数都依赖于错误报告。正如手册所示,似乎有一种方法可以解决这个问题:

内部PHP函数主要使用错误报告,只有现代面向对象的扩展使用异常。但是,使用ErrorException可以简单地将错误转换为异常。

他们没有抛出Exception,因为他们需要保持这个函数向后兼容。在较旧的PHP版本中没有异常,PHP<5.

布尔返回类型是为函数失败报告"保留"的。您需要做的是找出该功能失败的原因。我想它失败的唯一原因是无效的论点。

也许把它包装在一个安全的电话里会做你想做的事:

function safe_call_user_func()
{
  $nargs = func_num_args();
  $args = func_get_args();
  if ( $nargs == 0 )
    throw new RuntimeException( 'Require at least the callback param' );
  if ( !is_callable( $args[0] )
    throw new InvalidArgumentException( 'Callback param is invalid' );
  return call_user_func_array( array_shift( $args ), $args );
}