我在切换机箱情况方面遇到了麻烦。
为什么在以下场景中:
$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
的{{1}}输出也是如此?
修改
#3
等案例是一般案例$offer == 'special'
的私人案件。
这就是为什么我希望函数按此顺序排列。
如果开关/箱子不合适,我该怎么用?
答案 0 :(得分:2)
一旦switch
找到匹配的case
,它就会执行所有剩余的代码,直到它到达break
语句。以下case
表达式均未经过测试,因此您无法获得此类依赖关系。要实现子案例,您应该使用嵌套的switch
或if
语句。
switch ($category) {
case 'A':
$msg = 'hello';
if ($offer == 'special') {
$id = '123';
} elseif ($discount == '50D') {
$id = '999';
}
break;
...
}
echo $id;
当你有两个应该完全相同的情况时,最常使用case
没有break
的穿透功能。所以第一个有一个没有中断的空代码,它就会失败。
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;
...
}
答案 1 :(得分:0)
这是switch-case语句的工作原理。只要没有中断,只要满足一个条件,它就会经历所有case
es。您可以在手册中阅读:PHP switch。
如果您想在案例结束时停止执行交换机,只需添加break;
语句。