PHP 8.0嵌套三元运算符报错需显式括号,求修正方案
修复PHP 8.0下的嵌套三元运算符问题
你的问题根源是PHP 8.0 调整了三元运算符的优先级:旧版本中三元表达式按左关联顺序执行,PHP8+改为右关联,原代码未加括号明确优先级,导致逻辑错误且触发弃用警告。
方案1:修正括号的三元写法
给每个后续的三元表达式加上括号,强制符合原逻辑的执行顺序:
$there_is_skills = ( !empty($aboutus_feature1_title) || !empty($aboutus_feature1_text) ? 'yes' : ( !empty($aboutus_feature2_title) || !empty($aboutus_feature2_text) ? 'yes' : ( !empty($aboutus_feature3_title) || !empty($aboutus_feature3_text) ? 'yes' : ( !empty($aboutus_feature4_title) || !empty($aboutus_feature4_text) ? 'yes' : '' ) ) ) );
注:原代码初始赋值$there_is_skills = 'yes'会被后续三元覆盖,直接将三元结果赋值给变量更简洁。
方案2:更易维护的逻辑判断写法
嵌套三元可读性极差,推荐直接用逻辑或组合所有条件,代码更清晰且兼容所有PHP版本:
$has_feature1 = !empty($aboutus_feature1_title) || !empty($aboutus_feature1_text); $has_feature2 = !empty($aboutus_feature2_title) || !empty($aboutus_feature2_text); $has_feature3 = !empty($aboutus_feature3_title) || !empty($aboutus_feature3_text); $has_feature4 = !empty($aboutus_feature4_title) || !empty($aboutus_feature4_text); $there_is_skills = ($has_feature1 || $has_feature2 || $has_feature3 || $has_feature4) ? 'yes' : '';
或者更紧凑的单行写法:
$there_is_skills = ( !empty($aboutus_feature1_title) || !empty($aboutus_feature1_text) || !empty($aboutus_feature2_title) || !empty($aboutus_feature2_text) || !empty($aboutus_feature3_title) || !empty($aboutus_feature3_text) || !empty($aboutus_feature4_title) || !empty($aboutus_feature4_text) ) ? 'yes' : '';
内容的提问来源于stack exchange,提问作者kab
相关产品推荐
相关产品推荐

