我打电话给call_user_func
的函数应该返回FALSE。那么如果可调用是无效的,我该如何检测错误? (注意:为什么他们没有这个抛出异常而不是返回一个错误代码?或者有什么办法可以“捕获”错误吗?我有一个错误处理。我应该让它为我抛出异常吗? ?)如果call_user_func应该返回false,该怎么办?
5
A
回答
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);
}
相关问题
- 1. 当snapshot.exists()返回false时该怎么办?
- 2. 当Jetty EndPoint.flush(ByteBuffer b)返回false时该怎么办?
- 3. JDBC:连接返回NULL,该怎么办?
- 4. 如果beautifulsoups调用返回null,该怎么办?
- 5. 如果(空)语句在Java中返回,该怎么办?
- 6. 如果目标网址未返回,该怎么办
- 7. 如果[super init]返回nil该怎么办?
- 8. 如果我的navigationController返回“(null)”,我该怎么办?
- 9. 我应该怎么做,当SetEvent返回false
- 10. in_array返回false时应该返回true
- 11. 应该返回true,但返回false?
- 12. 如果抛出IOException,我该怎么办?
- 13. 如果setuptools未安装,该怎么办?
- 14. 如果google.load失败,该怎么办?
- 15. 如果DBCursor未关闭,该怎么办?
- 16. 如果mysql_query()失败,该怎么办?
- 17. 如果collections.defaultdict不可用,该怎么办?
- 18. 如果_POSIX_VDISABLE值为-1,该怎么办?
- 19. 我该怎么办?
- 20. com.mysql.jdbc.Driver该怎么办?
- 21. NullPointerException - 该怎么办?
- 22. 写入时返回更小的尺寸应该怎么办?
- 23. 爪哇 - 拳击整数 - 为什么它返回true,如果应该返回false
- 24. Python:为什么isinstance返回False,何时应该返回True?
- 25. 我该怎么办这个效果?
- 26. 如果ThreadPool.QueueUserWorkItem()返回FALSE,我该如何反应?
- 27. 如果不执行回调(),该怎么办?
- 28. 事务回滚后该怎么办
- 29. 使用Contract.Assert(true)时该怎么办,该方法必须返回什么?
- 30. 如果语句在应该为true时返回false
另外,我发誓,我试图寻找这一点,只是找不到了咒语,让我在那里。如果你知道的话,指导我一个适当的问题将是非常好的。 – 2012-08-01 21:18:26
你可以先用['is_callable'](http://www.php.net/manual/en/function.is-callable.php)进行测试。 – bfavaretto 2012-08-01 21:21:12
“无效”是什么意思?例如, – 2012-08-01 21:21:24