Laravel后端出现Unparenthesized `a ? b : c ?: d`废弃错误求助
解决Laravel中三元运算符废弃语法报错问题
问题原因
PHP 7.4及以上版本废弃了无括号的嵌套三元表达式写法(a ? b : c ?: d),编译器无法明确这种写法的运算优先级,必须通过括号明确逻辑分支,否则会触发废弃警告。
原代码问题点
原代码里的表达式$edit ? $shop->percent : old('percent')?:'90'属于无括号嵌套三元运算,违反了PHP新版本的语法规范。
修复方案
根据业务逻辑选择对应的修复方式:
方案1(符合编辑场景逻辑)
如果业务逻辑是:编辑状态下取店铺的percent值,非编辑状态下优先取表单旧输入值,无旧输入值则用默认值90,给old('percent') ?: '90'添加括号:
<?php echo Form::select('percent', \VanguardLTE\Shop::$values['percent_labels'], $edit ? $shop->percent : (old('percent') ?: '90'), ['class' => 'form-control']); ?>
方案2(另一种逻辑场景)
如果业务逻辑是:先根据$edit状态取对应值,若该值为空则用默认值90,给$edit ? $shop->percent : old('percent')添加括号:
<?php echo Form::select('percent', \VanguardLTE\Shop::$values['percent_labels'], ($edit ? $shop->percent : old('percent')) ?: '90', ['class' => 'form-control']); ?>
说明
两种方案的核心都是通过括号明确三元运算的优先级,消除语法歧义,符合PHP 7.4+的语法要求,从而解决废弃警告问题。
内容的提问来源于stack exchange,提问作者Mario Rossi
相关产品推荐
相关产品推荐

