2012-08-01 49 views
5

我打电话给call_user_func的函数应该返回FALSE。那么如果可调用是无效的,我该如何检测错误? (注意:为什么他们没有这个抛出异常而不是返回一个错误代码?或者有什么办法可以“捕获”错误吗?我有一个错误处理。我应该让它为我抛出异常吗? ?)如果call_user_func应该返回false,该怎么办?

+0

另外,我发誓,我试图寻找这一点,只是找不到了咒语,让我在那里。如果你知道的话,指导我一个适当的问题将是非常好的。 – 2012-08-01 21:18:26

+4

你可以先用['is_callable'](http://www.php.net/manual/en/function.is-callable.php)进行测试。 – bfavaretto 2012-08-01 21:21:12

+0

“无效”是什么意思?例如, – 2012-08-01 21:21:24

回答

10

如果您想检查要调用的函数或方法是否真的存在,可以在致电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函数都依赖于错误报告。人们似乎周围的方式,为the manual表示:

内部PHP函数主要使用Error reporting,只有现代Object oriented扩展使用异常。但是,错误可以简单地转换为ErrorException的例外。

+0

在我看来,有时只需要向后兼容。但是,我非常喜欢''ErrorException'业务。谢谢! – 2012-08-01 21:53:02

1

他们没有抛出异常,因为他们需要保持向后兼容这个功能。 旧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); 
} 
相关问题