PHP中使用`$b ?? []`与数组相加报错的问题及优化需求
解决PHP中未定义变量与空数组相加的简洁写法
这个问题的核心是运算符优先级在搞怪!PHP里+的优先级比??(null合并运算符)更高,所以你写的[] + $b ?? []会被解析成([] + $b) ?? []——这就导致先执行[] + $b,此时$b未定义,自然会抛出Undefined variable的错误。
而你单独写$b ?? []没问题,是因为这时候直接触发了null合并的逻辑,给未定义的$b返回了默认值[]。
想要不用临时变量又解决问题,只需要给$b ?? []加上括号,强制改变执行顺序就行:
$result_2 = [] + ($b ?? []);
这样PHP会先计算括号里的$b ?? [],得到一个安全的数组(不管$b是否定义),再和空数组执行相加操作,完全符合你的需求,而且比引入临时变量简洁多了。
对比你的临时变量写法,这个括号版本既保留了代码简洁性,又避免了额外变量的引入,完美解决问题~
内容的提问来源于stack exchange,提问作者mk-tool
相关产品推荐
相关产品推荐

