1

我与一些 if-else 条款斗争,并希望就如何设置逻辑提出建议。

我有以下代码:

//if isset a or b
if (isset(a) || isset(b) ) {
        //if isset a
    if (isset(a)) {
            switch(a) {
                case '1' : $num = '1';
                break;
                case '2' : $num = '2';
                break;
                case '3' : $num = '3';
                break;
            }
    //if not isset a check b for $num
        } else if (isset(b)) {
            switch(b){
                case '1' : $num = '1';
                break;
                case '2' : $num = '2';
                break;
                case '3' : $num = '3';
                break;
            }
        }
//if not isset a and b, set default 
} else {
        $num = '1';
    }

问题是我没有得到它何时使用 else/else if。所以我想知道我对那个代码和我的注释行是否正确。

非常感谢。

4

4 回答 4

3

通常,如果您的if-else结构过于复杂(超过两级大括号),这是分治法的最佳时机:创建解决分离问题的函数。

function getNum(&$a, &$b, $options) { 
  if(isset($a) && in_array($a,$options)) return $a;
  if(isset($b) && in_array($b,$options)) return $b;
  return 1;
}

$options = array(1,'2','whatever');
$num = getNum($a,$b,$options);

使用这种方法,问题只是函数体的问题,因此您可以将其与其余代码分开解决。这就是所需的易于维护的结构。

于 2013-05-27T19:00:31.673 回答
2

通常,如果您的 if-else 结构过于复杂(超过两级大括号),这是分治法的最佳时机:创建解决分离问题的函数。

  1. 虽然这是正确的,但您的结构是可以接受的。大多数程序员都希望改变这一点,但如果你对这种工作方式感到满意并且理解它,它仍然可以工作。
  2. 其次,else if (isset(b))根据是否可以设置两者,您可能需要也可能不需要。如果他们不能,您可以将您的替换else if (isset(b))else.

好的,我不确定您是否需要这个,但这里是对 、 和 的if快速else if解释else

if (condition)用于测试条件是真还是假。如果为真,则执行 and 之间的{代码}。否则,它不是。

else if要求上述if条件为假。如果您if的 ' 条件为假但任何以下else if为真,else if则将执行。

最后,如果所有ifandelse if的条件都返回 false,else则执行 ' 代码。

希望这可以帮助。

于 2013-05-27T19:31:40.617 回答
1

您可以使用以下方法避免很多控制流问题。

if(isset(a)) {
    $num = a;
} else if(isset(b)) {
    $num = b;
}

$arr = array('1', '2', '3');
if(!in_array($num, $arr)) {
    $num = '1';
}
于 2013-05-27T18:50:01.723 回答
0
//default
$num = '1';

if(isset(a)) {
  $num = a;
} else if(isset(b)) {
  $num = b;
}
于 2013-05-27T18:53:20.380 回答