PHP7.1引用参数传null触发报错,如何实现目标参数传递?
解决PHP引用传参时无法直接传递null的问题
这个坑我之前踩过!你遇到的错误“Only variables can be passed by reference”,本质是PHP的语法规则限制:引用传参的位置只能传入变量,不能直接传字面量(比如null),哪怕函数的默认值就是null也不行。
下面给你几个可行的解决办法,你可以根据自己的场景选:
1. 把null赋值给变量后传递
这是最通用的办法,不管PHP版本多少都能用:
// 先把null存到变量里 $tempNull = null; // 再把变量传给第一个参数 myfunction($tempNull, $something);
因为现在传递的是变量,符合引用传参的要求,同时函数本身能处理null,完全满足你的需求。
2. 移除第一个参数的引用(如果允许的话)
如果你的函数不需要修改外部变量的值(也就是引用传参不是必须的),可以直接把第一个参数的&去掉,改成普通参数:
function myfunction($first = null, $second = null) { // 原来的执行逻辑不变 } // 现在直接调用就不会报错了 myfunction(null, $something);
注意:如果函数内部需要修改$first并让外部变量同步更新,那这个办法就不能用,得用第一种。
3. 使用命名参数(PHP 8.0+适用)
如果你用的是PHP 8.0及以上版本,命名参数是最优雅的解决方案——直接指定第二个参数的值,第一个参数自动使用默认的null:
myfunction(second: $something);
这种写法清晰直观,还避免了额外变量的创建,推荐在高版本PHP中使用。
内容的提问来源于stack exchange,提问作者Roland Seuhs
相关产品推荐
相关产品推荐

