switch语句多个变量赋值而不重复

时间:2012-11-15 20:44:58

标签: php switch-statement

假设我有一个这样的开关语句:

switch ($var)
{
    case 'A':
       $a = 1;
       break;

    case 'B':
       $a = 1;
       $b = 2;
       break;

    case 'C':
       $a = 1;
       $b = 2;
       $c = 3;
       break;
}

有没有办法可以构建switch语句,让重复的$a = 1$b = 2出现一次?

4 个答案:

答案 0 :(得分:8)

只需还原case语句的顺序并删除break语句。

switch ($var)
{
    case 'C':
       $c = 3;
    case 'B':
       $b = 2;
    case 'A':
       $a = 1;
       break;
}

来自the manual

  

了解如何执行switch语句非常重要   为了避免错误。 switch语句逐行执行   (实际上,声明中的声明)。一开始,没有代码   执行。仅当找到具有值的case语句时   匹配PHP表开始执行的switch表达式的值   声明。 PHP继续执行语句直到结束   切换块,或第一次看到break语句。如果   你不要在案件陈述的末尾写一个破产陈述   列表,PHP将继续执行以下案例的陈述。

答案 1 :(得分:6)

像这样:

switch($var) {
    case 'C':
        $c = 3;
        // fallthrough
    case 'B':
        $b = 2;
        // fallthrough
    case 'A':
        $a = 1;
}

评论当然是可选的,但我希望将它们留在那里,以确保我不会忘记break的缺失是故意的。

答案 2 :(得分:2)

switch ($var) {
  case 'C':
    $c = 3;
  case 'B':
    $b = 2;
  case 'A':
    $a = 1;
    break;
}

应该做你想做的事。

答案 3 :(得分:2)

switch($var) {
    case 'C':
        $c = 3;
    case 'B':
        $b = 2;
    case 'A':
        $a = 1;
}

通过不使用中断,如果$ var例如包含'C',则整个开关结构将被执行。如果$ var为'B',则交换机将在'B'的情况下进入并从那里执行。