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

PHP传递匿名函数作为函数参数时报错:null不可调用,求解决

问题分析与解决

错误原因

你调用sfunc($summary, $fun() )时,$fun()是直接执行匿名函数,而非传递函数本身。由于你的匿名函数没有返回值,$fun()的执行结果为null,当sfunc遍历$funcs尝试调用$func()时,自然会触发“null不可调用”的报错。

修正方案

只需将调用时的$fun()改为$fun,传递函数本身即可。因为sfunc使用了...$funcs可变参数语法,支持传入任意数量的匿名函数,后续参数会自动被收集为数组处理。

修正后的完整代码

function sfunc($a, ...$funcs){
    echo '<details> <summary>'. $a . '</summary>' . PHP_EOL;
    foreach ($funcs as $func) {
        // 可选:增加可调用判断,提升代码健壮性
        if (is_callable($func)) {
            $func();
        }
    }
    echo '</details>' . PHP_EOL;
}

$fun1 = function (){
    echo "123";
};

$fun2 = function (){
    echo "456";
};

// 可传递任意数量的匿名函数
sfunc($summary, $fun1, $fun2);

额外说明

  • 加入is_callable($func)判断,能避免传入非可调用类型参数时再次触发报错,让代码更稳定。
  • ...$funcs语法会自动将后续所有传入的参数打包为数组,完全适配你“传递的匿名函数数量可能变化”的需求。

内容的提问来源于stack exchange,提问作者upkagefa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:52:07