我调用的函数call_user_func
应该返回 FALSE。那么如果可调用对象无效,我该如何检测错误呢?
(旁注:为什么他们没有抛出异常而不是返回错误代码?或者有没有办法“捕捉”错误?我有一个错误句柄。我应该让它为我抛出异常吗?)
我调用的函数call_user_func
应该返回 FALSE。那么如果可调用对象无效,我该如何检测错误呢?
(旁注:为什么他们没有抛出异常而不是返回错误代码?或者有没有办法“捕捉”错误?我有一个错误句柄。我应该让它为我抛出异常吗?)
如果要检查要调用的函数或方法是否真的存在,可以is_callable
在调用前使用call_user_func
。您可以将整个内容包装在一个函数中以便于重用:
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将错误简单地转换为异常。
他们没有抛出异常,因为他们需要保持这个函数向后兼容。在旧的 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 );
}