如果call_user_func应该返回false怎么办?

时间:2012-08-01 21:18:08

标签: php

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

(旁注:为什么他们没有抛出异常而不是返回错误代码?或者有没有办法“捕获”错误?我有一个错误句柄。我应该为它抛出异常吗? )

2 个答案:

答案 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 );
}