我已经阅读了堆栈上有关使用call_user_func_array与仅调用该函数的其他答案,但我仍然无法收集何时应使用前者。call_user_func_array我知道当您不知道传递了多少个参数时,您可能想要使用,因此您可以这样做: $args = func_get_args();...但是如果要在函数中使用参数,您是否总是需要知道参数?
以下两项工作,我认为第一个的开销较小。
$format = new Foo;
$method = 'somemethod';
$arg = 'somevalue';
if (method_exists($format, $method)) {
return $format->$method($arg);
}
Run Code Online (Sandbox Code Playgroud)
与
return call_user_func_array(array($format, $method), array($arg));
Run Code Online (Sandbox Code Playgroud)
什么时候才能真正从使用中受益call_user_func_array?
可以使用动态调用函数或方法call_user_func_array。如果调用本身失败,FALSE则返回。此外,call_user_func_array还返回所调用的函数或方法的返回值。
因此,当被调用的函数或方法FALSE也返回时(例如,参见 SO示例),该值将被识别为误报。
如何可靠地检查函数或方法调用是否成功执行call_user_func_array?
编辑:人们倾向于指出 的存在is_callable。但这并不是在调用方法之前检查方法是否存在,从而避免可能的错误。实际上,在执行call_user_func_array函数调用之前,它的参数和参数类型已经被验证Reflection,以避免大规模分配攻击。
文档提到了返回值,但我没有看到如何使用它来检查调用是否成功。FALSE