使用switch语句进行多个变量赋值而不重复

3

Let's say I have a switch statement like this:

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个回答

9
只需颠倒您的案例语句的顺序并去掉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的语句。

6

就像这样:

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

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


我也开始在找到它们在其他代码中时将它们放进去。它们是非常有用的注释。"fallthrough intended" 或类似的东西。+1。 - hakre

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

如果不使用break,例如$var包含'C',则整个switch结构都将被执行。如果$var是'B',则switch将进入case 'B'并从那里执行。


2
根据变量值执行不同的操作:
switch ($var) {
  case 'C':
    $c = 3;
  case 'B':
    $b = 2;
  case 'A':
    $a = 1;
    break;
}

代码将根据变量的值执行不同的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接