Cod*_*4R7 2 php 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
您可以显式检查上次调用期间是否发生错误:
error_clear_last(); // since PHP 7, before that you'll need to store and
// compare the error state before and after the call
$result = call_user_func_array($foo, $bar);
if ($result === false && error_get_last()) {
echo 'Failed to call ', $foo;
}
Run Code Online (Sandbox Code Playgroud)
以上是对任何错误的一般检查,也许您想更详细地检查最后一个错误。它看起来像:
Array
(
[type] => 2
[message] => call_user_func_array() expects parameter 1 to be a valid callback, function 'foo' not found or invalid function name
[file] => /in/M8PrG
[line] => 3
)
Run Code Online (Sandbox Code Playgroud)
您可能想检查是否message匹配类似的内容'call_user_func_array() expects parameter 1 to be a valid callback'和/或它引用的行是否是上面的行。请注意,特别检查消息可能会在 PHP 版本之间中断。
另一种方法是在您假设的回调之前检查是否is_callable。
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |