我用call_user_func
调用的函数应该返回FALSE。那么如果可调用无效,我如何检测错误?
(旁注:为什么他们没有抛出异常而不是返回错误代码?或者有没有办法“捕获”错误?我有一个错误句柄。我应该为它抛出异常吗? )
答案 0 :(得分:11)
如果要检查要调用的函数或方法是否确实存在,可以在调用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函数都依赖于错误报告。似乎有一种解决方法,正如the manual所示:
内部PHP函数主要使用Error reporting,只有现代Object oriented扩展使用异常。但是,错误可以简单地转换为ErrorException的异常。
答案 1 :(得分:1)
他们没有抛出异常,因为他们需要保持此功能向后兼容。 旧的PHP版本中没有Exception,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 );
}