PHP - switch case 中 break 和 continue 的区别

3

什么是两者之间的区别?

switch (variable) {
        case 'value':
        # code...
        break;

        case 'value':
        # code...
        break;
}

还有这个

switch (variable) {
        case 'value':
        # code...
        continue;

        case 'value':
        # code...
        continue;
}

"这是真正的不同结果还是相同的结果?"

4
请阅读continue手册中的注释,或者直接阅读整个手册。请注意保持翻译的准确性,并尽可能使语言通俗易懂。 - Naruto
如果您希望在匹配多个值时执行代码,则仍需使用“break”;case“value1”:并在其下方添加case“value2”:然后在其下方--执行代码。 - Adam T
3个回答

2
这是PHP的一个特殊情况,因为根据官方文档所述:(official documentation)

注意:在PHP中,switch语句被视为循环结构,用于continue。当未传递参数时,continue的行为类似于break。如果switch位于循环内部,则continue 2将继续执行外部循环的下一次迭代。

因此,本质上意味着您的两个示例之间没有实际区别。但是,为了清晰起见,最好使用“break”,因为这是其他语言的标准。还要注意,如果switch在循环内部(或更多),您可以使用“continue 2”(或3、4…)来前进到循环的下一个迭代。

1
在PHP中,上述两个代码以相同的方式工作。这里的breakcontinue语句防止控制流到达下一个case。也就是说,continue在这里的作用就像break一样。此外,switch语句只打算执行一次。它不是循环。因此,在这里continue没有意义。
注意:如果有循环包含这个switch语句,那么结果将会不同。

0

这是一个简单的示例代码,其中包含上述两种情况的切换

<?php
    $variable = 20;
    echo "Normal<br/>";
    switch ($variable) {
        case '20':
            echo "twenty";
        break;
        case '21':
            echo "twenty one";
        break;
    }

    echo "<br/><br/>With Continue<br/>";
    switch ($variable) {
        case '20':
            echo "twenty";
        continue;
        case '21':
            echo "twenty one";
        continue;
    }
?>

当我执行上述代码时,我得到了以下输出。
Normal
twenty

With Continue
twenty

如何实现?

break语句的工作原理

Break语句会导致代码执行退出块并执行下一条语句,因此switch语句只会执行一个case语句并退出switch块而不执行其他case块。

continue语句的工作原理

Continue语句在循环中会导致当前迭代停止执行并进入下一个迭代(如果存在),但在switch语句中被视为循环语句,但没有下一个迭代导致退出switch语句。

我们也可以像这样使用没有break语句的switch语句

<?php
    $variable = 20;
    echo "Normal";
    switch ($variable) {
        case '19':
            echo "<br/>Nineteen";
        case '20':
            echo "<br/>twenty";
        case '21':
            echo "<br/>twenty one";
        case '23':
            echo "<br/>twenty three";
    }
?>

以上代码的输出将会是:
Normal
twenty
twenty one
twenty three

即执行在第一个匹配的 case 语句之后的所有 case 语句。

1
你应该更新你的答案,因为官方文档指出:在PHP中,switch语句被认为是循环结构,因此continue会像break一样被处理(当没有传递参数时)。 - Technoh

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