3

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

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

4 回答 4

9

只需恢复 case 语句的顺序并删除 break 语句。

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

手册

为了避免错误,了解 switch 语句是如何执行的很重要。switch 语句逐行执行(实际上是逐语句执行)。一开始,没有代码被执行。只有当 case 语句的值与 switch 表达式的值匹配时,PHP 才会开始执行语句。PHP 继续执行语句,直到 switch 块结束,或者它第一次看到 break 语句。如果你不在一个 case 语句列表的末尾写一个 break 语句,PHP 将继续执行下一个 case 的语句。

于 2012-11-15T20:47:25.227 回答
6

像这样:

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

注释当然是可选的,但我喜欢将它们留在那里以确保我不会忘记缺少 abreak是故意的。

于 2012-11-15T20:47:33.080 回答
2
开关 ($var) {
  案例“C”:
    $c = 3;
  案例“B”:
    $b = 2;
  案例“A”:
    $a = 1;
    休息;
}

应该做你想做的。

于 2012-11-15T20:48:17.267 回答
2
switch($var) {
    case 'C':
        $c = 3;
    case 'B':
        $b = 2;
    case 'A':
        $a = 1;
}

通过不使用中断,如果 $var 例如包含“C”,则整个开关结构将被执行。如果 $var 是 'B',则开关将在 case 'B' 处输入并从那里执行。

于 2012-11-15T20:49:36.023 回答