我有一个变量,需要根据两个条件分配四个可能值中的一个。
目前我正在这样做:
if (conditionsOne) {
$foo = (conditionTwo) ? 'one' : 'two';
} else {
$foo = (conditionTwo) ? 'three' : 'four';
}
但是,这一点,恕我直言,略微伤害编程的“黄金法则”,即“永远不会写两次相同的代码”(如果有人更改conditionTwo
并忘记更改另一个conditionTwo
我们有一个缺陷)。
我也可以把它写成嵌套的三元组,但这也需要两倍的条件,而且可读性会降低。
PHP中是否有任何方法可以在没有代码加倍的情况下进行此类赋值(因此在相同条件下不进行两次检查)并且不会损害可读性?
答案 0 :(得分:1)
存储结果,并使用switch
:
$s = 0;
if (conditionOne) {
$s += 1;
}
if ($conditionTwo) {
$s += 10;
}
switch ($s) {
case 0: $foo = 'four'; break;
case 1: $foo = 'two'; break;
case 10: $foo = 'three'; break;
case 11: $foo = 'one'; break;
}
答案 1 :(得分:0)
应该有用......
$values=array(array(“four”,”three”),array(“two”,”one”));
$foo=$values[$conditionsOne][$conditionsTwo];
答案 2 :(得分:0)
我不知道这种方式是否会更好,但你可以制作一个功能并使用" return"至 优化比较:
function cond( $conditionsOne, $conditionsTwo )
{
if( $conditionsOne && !$conditionsTwo ) return 'one';
if( $conditionsOne ) return 'two';
if( $conditionsTwo ) return 'three';
return 'four';
}
$foo = cond( $conditionsOne, $conditionsTwo );