Switch/Case 没有 `break`,没有正确检查大小写

Switch/Case without a `break`, doesn't check the cases properly

我在 switch case 条件方面遇到了问题。

为什么会出现以下情况:

$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;

}

我得到 999id 输出,即使 #2#3 没有填满?

编辑:

$offer == 'special' 等案例是 $category == 'A' 一般案例的私有案例。 这就是为什么我希望函数按此顺序执行。 如果switch/case不合适,我该用什么?

这就是 switch-case 语句的工作原理。一旦满足一个条件,它就会遍历所有 casees,只要没有中断。您可以在此处的手册中阅读它:PHP switch.

如果要在case结束时停止switch的执行,只需添加break;语句即可。

一旦 switch 找到匹配的 case,它就会执行所有剩余的代码,直到到达 break 语句。 None 下面的 case 个表达式已经过测试,所以你不能有这样的依赖关系。要实现 sub-cases,您应该使用嵌套的 switchif 语句。

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

不带 breakcase 的 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;
...
}