没有“break”的开关/外壳,不能正确检查外壳

我遇到了开关盒conidtion的问题。

为什么在以下情况下:

$category = "A";
$offer = "none";
$discount = "none";

对于下面的代码:

switch (TRUE) {

case ($category == 'A') : / #1

    $msg = "hello"; 

case ($offer == 'special') : / #2

        $id = "123"; 

case ($discount == '50D') : / #3

        $id = "999";


break;

echo $id;

}

尽管#2#3没有满足,我获得999输出为id ,尽管?

编辑:

例如$offer == 'special'是一般情况下的私人案例,即$category == 'A' 。 这就是为什么我希望函数按照这个顺序走的原因。 如果开关/外壳不合适,我应该使用什么?


一旦switch找到匹配的case ,它就会执行所有剩余的代码,直到它到达一个break语句。 以下任何一种case表达式都未经过测试,因此您不能拥有这样的依赖关系。 要实现子情况,你应该使用嵌套的switchif语句。

switch ($category) {
case 'A':
    $msg = 'hello';
    if ($offer == 'special') {
        $id = '123';
    } elseif ($discount == '50D') {
        $id = '999';
    }
    break;
...
}
echo $id;

如果您有两个应该完全相同的事件,那么最常使用的是无break case下的fallthrough功能。 所以第一个有一个没有中断的空代码,它只是通过。

switch ($val) {
case 'AAA':
case 'bbb':
    // some code
    break;
...
}

当两种情况相似时,它也可以使用,但其中一个需要先运行一些额外的代码:

switch ($val) {
case 'xxx':
    echo 'xxx is obsolete, please switch to yyy';
case 'yyy':
    // more code
    break;
...
}

这就是switch-case语句的工作原理。 只要一个条件得到满足,只要没有休息,它就会经历所有的case 。 您可以在这里的手册中阅读它:PHP开关。

如果您想在案例结束时停止交换机的执行,只需添加一个break; 声明。

链接地址: http://www.djcxy.com/p/84463.html

上一篇: Switch/Case without a `break`, doesn't check the cases properly

下一篇: Can some one help me solve this logic using C#