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;
}
我得到 999
的 id
输出,即使 #2
和 #3
没有填满?
编辑:
$offer == 'special'
等案例是 $category == 'A'
一般案例的私有案例。
这就是为什么我希望函数按此顺序执行。
如果switch/case不合适,我该用什么?
这就是 switch-case 语句的工作原理。一旦满足一个条件,它就会遍历所有 case
es,只要没有中断。您可以在此处的手册中阅读它:PHP switch.
如果要在case结束时停止switch的执行,只需添加break;
语句即可。
一旦 switch
找到匹配的 case
,它就会执行所有剩余的代码,直到到达 break
语句。 None 下面的 case
个表达式已经过测试,所以你不能有这样的依赖关系。要实现 sub-cases,您应该使用嵌套的 switch
或 if
语句。
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 条件方面遇到了问题。
为什么会出现以下情况:
$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;
}
我得到 999
的 id
输出,即使 #2
和 #3
没有填满?
编辑:
$offer == 'special'
等案例是 $category == 'A'
一般案例的私有案例。
这就是为什么我希望函数按此顺序执行。
如果switch/case不合适,我该用什么?
这就是 switch-case 语句的工作原理。一旦满足一个条件,它就会遍历所有 case
es,只要没有中断。您可以在此处的手册中阅读它:PHP switch.
如果要在case结束时停止switch的执行,只需添加break;
语句即可。
一旦 switch
找到匹配的 case
,它就会执行所有剩余的代码,直到到达 break
语句。 None 下面的 case
个表达式已经过测试,所以你不能有这样的依赖关系。要实现 sub-cases,您应该使用嵌套的 switch
或 if
语句。
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;
...
}