如何简化嵌套if语句以支持扩展更多字符串变量?
问题描述
仅3个字符串变量就写出了嵌套复杂的判断逻辑,请问怎么重构代码,才能轻松扩展到10个以上变量?
原代码:
$x = 'a'; $y = 'b'; $z = 'c'; if ($x){ if($y){ if($z){ return $x.$y.$z; } return $x.$y; } return $x; } if($y){ if($z){ return $y.$z; } return $y; } if($z){ return $z; } return "";
优化方案
把变量按优先级顺序存入数组,通过遍历数组实现判断逻辑,后续扩展只需向数组添加变量,无需修改核心逻辑。
逻辑说明
原代码的本质是:
- 按
x→y→z的优先级,跳过开头的空变量,找到第一个非空变量 - 从该变量开始,依次拼接后续的非空变量,直到遇到第一个空变量就停止
- 没有非空变量则返回空字符串
重构后代码
// 按优先级顺序存入数组,扩展时直接追加新变量即可 $vars = [$x, $y, $z]; $result = ''; foreach ($vars as $var) { // 还没找到第一个非空变量时,跳过空值 if (empty($var) && $result === '') { continue; } // 已经开始拼接后,遇到空值就停止 if (empty($var)) { break; } // 拼接非空变量 $result .= $var; } return $result;
更简洁的写法
$vars = [$x, $y, $z]; $result = ''; foreach ($vars as $var) { if (empty($var)) { $result ? break : continue; } $result .= $var; } return $result;
这样扩展到10个变量时,只需要修改$vars数组,比如$vars = [$x, $y, $z, $d, $e, $f, $g, $h, $i, $j];,循环逻辑完全不用改,代码的可维护性和扩展性都大幅提升。
内容的提问来源于stack exchange,提问作者Murtaza Haji
相关产品推荐
相关产品推荐

