【问题标题】:PHP: Breaks in default case switches?PHP:默认情况切换中断?
【发布时间】:2012-08-21 03:13:58
【问题描述】:
switch ($var) {
    case 0:
        // Do something...
        break;
    case 1:
        // Do something...
        break;
    default:
        // Do something...
        break;
}

我见过一些人在默认情况下使用 break。由于默认情况是触发时执行的最后一个情况,因此需要在那里休息吗?我猜这只是出于惯例还是有其他原因?

【问题讨论】:

  • 我曾经在another forum for ActionScript 中问过一个相同的问题。有趣的是看到这里有人问它:)
  • 来吧,没有它会很丑:)
  • @inhan 很高兴听到我不是唯一一个。 :) 看看你的例子,我可以明白为什么当你没有默认值时,人们会倾向于在常规 case 语句中添加一个中断。如果您决定稍后在代码中添加更多案例,它将使您不太容易出错并忘记添加中断。但是,对于默认情况,您永远不会有多个情况,并且通常是交换机上的最后一种情况。
  • 我不认为 switch case 是通过任何机制重新排序的,所以 default case 也可以作为第一个 case 使用。但是,是的,您可能不能超过 1 个。否则它可能会跳过后面的那些(如果您在同一个 switch 条件下有多个 default 案例)

标签: php switch-statement case break


【解决方案1】:

只要默认值位于 switch 语句的末尾,就没有理由需要它。请注意,默认不需要是最后一种情况:http://codepad.viper-7.com/BISiiD

<?php
$var = 4;
switch($var)
{
    default:
        echo "default";
        break;
    case 4:
        echo "this will be executed";
        break;
}

【讨论】:

  • 我认为将 default 放在开关末尾以外的任何地方都是一种非常糟糕的做法。因为,正如 PHP 手册中所说:“switch 语句逐行执行(实际上是逐语句执行)。开始时,不执行任何代码。仅当找到与值匹配的 case 语句时switch 表达式是否 PHP 开始执行语句。PHP 继续执行语句,直到 switch 块结束,或者它第一次看到 break 语句。所以默认后的任何情况都是误导性的。
  • 这是维护成本高昂的代码:“为什么在没有注释解释这种偏离常规做法的情况下,默认设置在首位”。不过它是完全有效的 :) 很高兴知道 break 也可以用来“突破” if 或循环。
  • @HerbertVan-Vliet 不是 if 块,而是 can for a for loop
  • 如果之后没有其他内容,为什么我们还需要最后一个 break
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 2021-06-08
  • 2016-05-13
  • 2015-03-26
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
相关资源
最近更新 更多