【问题标题】:Go to default case from another case in PHP从 PHP 中的另一个案例转到默认案例
【发布时间】:2019-12-29 15:43:54
【问题描述】:

可以从类似这样的其他案例中转到default 案例吗?

$a = 0;
$b = 4;
switch ($a) {
    case 0:
        if ($b == 5) {
            echo "case 0";
            break;
        }
        else
            //go to default
    case 1:
        echo "case 1";
        break;
    default:
        echo "default";
}

我试图删除else,并希望它会继续评估所有后续案例,直到default,但它会进入case 1。为什么会这样?如何才能使用默认设置?

【问题讨论】:

  • 个人建议:如果不够直接,请放弃switch / case。只需使用 if / else 代替:3v4l.org/OEkD6

标签: php switch-statement


【解决方案1】:

是的,如果您重新排序 case 语句,您可以:

switch ($a) {
    case 1:
        echo "case 1";
        break;
    case 0:
        if ($b == 5) {
            echo "case 0";
            break;
        }
    default:
        echo "default";
}

为什么会这样: 它已定义,如果您没有 break 语句,则将执行下一个 case。如果没有更多的case,如果定义了default,则会执行

【讨论】:

  • 在执行之前不应该评估每个案例吗?
  • @yaugenka 不应该
  • 这个答案是对的——这也是原发帖人要求的——但人们普遍认为,使用 switch 的“fall through”功能不是一个好主意(也就是说,你不这样做的地方) t break,然后继续下一个案例),因为这是非常不寻常的,因此对于将来阅读您的代码的人来说非常混乱。
【解决方案2】:

您可以重新排序 case 语句以允许进入下一个选项,但如果您多次希望这样做,它可能变得不可能或非常脆弱。另一种方法是将更多的通用代码放入一个函数中......

function defaultCase()  {
     echo "default";
}

switch ($a) {
    case 0:
        if ($b == 5) {
            echo "case 0";
        }
        else {
            defaultCase();
        }
        break;
    case 1:
        echo "case 1";
        break;
    default:
       defaultCase();
}

【讨论】:

    【解决方案3】:

    我建议使用我在 cmets 中提到的简单的 if / else

    但是,如果有帮助,您可以使用 switch 语句来执行此操作:

    switch ([$a, $b]) {
      case [0, 5]:
        echo 'case 0';
        break;
      case [1, $b]:
        echo 'case 1';
        break;
      default:
        echo 'default';
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 2019-10-16
      相关资源
      最近更新 更多