You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:54:03