PHP中call_user_func_array调用后后续代码不执行如何解决
问题根因
你遇到的执行中断不是call_user_func_array本身的特性,默认状态下该函数执行完回调后会正常返回结果、继续执行后续代码。你给出的示例出现中断的核心原因是非静态方法被以静态方式调用,PHP抛出未捕获的致命错误直接终止了程序运行。
你代码中的B::bar()是普通实例方法,你传入的回调格式['B', 'bar']属于静态调用,在PHP 7.4及以上版本会触发致命错误,自然不会执行后续代码。
修复方案
方案1:将被调用方法改为静态方法
如果bar方法不需要依赖B类的实例属性,直接加static关键字声明为静态方法即可:
class B { static function bar($arg1, $arg2) { $result = "$arg1 and $arg2"; echo "Indeed we see '$result'.<br>\n"; return $result; } }
方案2:传入B类实例作为回调调用主体
如果bar方法需要保留实例方法的属性,将回调的第一个参数替换为B类的实例即可:
class A { function foo() { $args = ['apples', 'oranges']; echo "This line executes.<br>\n"; $bInstance = new B(); $result = call_user_func_array([$bInstance, 'bar'], $args); echo "This line now executes.<br>\n"; echo "Thus we can use the phrase '$result' within this function.<br>\n"; } }
调试建议
如果修改后仍出现执行中断,可以在代码开头加入错误显示配置,快速定位具体错误原因:
error_reporting(E_ALL); ini_set('display_errors', 1);
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

