使用开关操作员

时间:2017-04-09 12:23:44

标签: php syntax

以这种方式使用开关操作符是否合法,如果我想按顺序a,b,c打印第一个非空变量。 我看到的唯一问题是在某些条件成立的情况下。 我已经在5.6和7版本的php上测试了它 但它不会依赖于php的版本吗?

$a = '';
$b = '';
$c = 'c';

switch (true) {
  case (!empty($a)) :
    echo $a;
    break;
  case (!empty($b)) :
    echo $b;
    break;
  default:
    echo $c;
};

2 个答案:

答案 0 :(得分:1)

您不依赖于此处的任何未记录的行为,并且在将来的任何PHP版本中都不会发生这种情况。

有时会讨论使用switch(true)的技巧,好像它是一个额外的运算符,但它实际上只是switch语句工作的结果 - 每个case条件都与使用switch的{​​{1}}中的值,因此您每次都有效地检查==

您的代码:

$condition == true

它相当于:

switch (true) {
  case (!empty($a)) :
    echo $a;
  break;
  case (!empty($b)) :
    echo $b;
  break;
  default:
    echo $c;
}

由于您未使用任何内容,我们可以使用 if (true == !empty($a)) { echo $a; goto end; } if (true == !empty($b)) { echo $b; goto end; } // fallback echo $c; // goto target end: goto重写else部分:

elseif

当然 if (true == !empty($a)) { echo $a; } elseif (true == !empty($b)) { echo $b; } else { echo $c; } 也是多余的:

true ==

只要每个 if (!empty($a)) { echo $a; } elseif (!empty($b)) { echo $b; } else { echo $c; } 都有一个对应的case,根据switch语句的基本定义,这些不同的代码片段保证相同。到目前为止,最后一个是最常见的,因此最容易让其他人阅读您的代码。

break的最大区别在于,您可以"堕落"并以不同的方式结合案例。如果您需要这样做,那么switch表单可能会有用。如果您不需要它,您应该通过使用正常的if-elseif链来避免意外掉落的风险。

答案 1 :(得分:0)

$a = '';
$b = '';
$c = 'c';

if(!empty($a)){
    echo $a;
}elseif (!empty($b)){
    echo $b;
}else{
    echo $c;
}

elseif是最好的和最一般的方式!