PHP - 在切换情况下中断和继续之间的区别

Posted

技术标签:

【中文标题】PHP - 在切换情况下中断和继续之间的区别【英文标题】:PHP - Difference between break and continue in switch case 【发布时间】:2016-03-25 12:25:20 【问题描述】:

两者有什么区别

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

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

还有这个

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

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

结果真的不一样还是一样?

【问题讨论】:

阅读continue手册中的注释,或者只是整件事.. 如果你想让代码在case匹配超过1个值时执行,你仍然使用"break"; case "value1": and under it) case "value2": then under that -- 要执行的代码 【参考方案1】:

这是 php 的一种特殊情况,因为正如 official documentation 所述:

注意:在 PHP 中 switch 语句被认为是一个循环结构 为继续的目的。 continue 表现得像 break (当没有 参数被传递)。如果开关在循环内, continue 2 将 继续外循环的下一次迭代。

因此,从本质上讲,这意味着您的两个示例之间没有实际区别。但是为了清楚起见,我认为最好使用break,因为这是其他语言的标准。另请注意,如果开关在循环内(或更多),您可以使用 continue 2(或 3、4...)前进到循环的下一次迭代。

【讨论】:

【参考方案2】:

在 PHP 中,上述两个代码的工作方式相同。这里breakcontinue 语句阻止控制转到下一个case。那就是continue 的行为就像这里的break。 switch 也只打算执行一次。这不是一个循环。因此continue 在这里不相关。

注意:如果有循环包围这个switch 语句,那么结果会有所不同。

【讨论】:

【参考方案3】:

这是一个简单的示例代码,上面提到的两种开关情况

<?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 语句的工作

Continue 语句的工作

Continue statement 在循环的情况下将导致循环停止执行循环的当前迭代并继续循环的下一次迭代(如果存在)但在 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 语句。

【讨论】:

您应该更新您的答案,因为官方文档指出: 在 PHP 中,switch 语句被视为用于继续的循环结构。 continue 的行为类似于 break(当没有传递参数时)。

以上是关于PHP - 在切换情况下中断和继续之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

互斥锁,自旋锁,原子操作原理和实现

如何让 Visual Studio 调试器在没有焦点的情况下中断

在ucos中任务之间是如何切换的?l例如建立两个任务。任务A正在运行如何切换到任务B?

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

多线程程序,当一条原子指令刚执行一半的时候,CPU时间片耗尽,此时是立刻切换线程吗?