PHP根据两个独立条件( - >四个可能的值)分配给变量的最佳方式是什么?

时间:2014-12-15 13:07:19

标签: php boolean conditional-statements variable-assignment

我有一个变量,需要根据两个条件分配四个可能值中的一个。

目前我正在这样做:

if (conditionsOne) {
  $foo = (conditionTwo) ? 'one' : 'two';
} else {
  $foo = (conditionTwo) ? 'three' : 'four';
}

但是,这一点,恕我直言,略微伤害编程的“黄金法则”,即“永远不会写两次相同的代码”(如果有人更改conditionTwo并忘记更改另一个conditionTwo我们有一个缺陷)。

我也可以把它写成嵌套的三元组,但这也需要两倍的条件,而且可读性会降低。

PHP中是否有任何方法可以在没有代码加倍的情况下进行此类赋值(因此在相同条件下不进行两次检查)并且不会损害可读性?

3 个答案:

答案 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 );