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
相关产品推荐
相关产品推荐

