代码:
switch ($_GET['operation']) {
case "professionist":
case "company":
case "student":
echo "ok<br>";
case "professionist":
echo "inprofessionist<br>";
break;
case "company":
echo "incompany<br>";
break;
default:
echo "Meh!<br>";
break;
}
我的目标是首先执行一些(专业人士/公司/学生共同)代码,然后根据操作执行其余代码...
问题是前3个案例运作完美,但是,如果例如操作是“公司”,那么交换机会继续“专业”案例,我做错了什么?怎么能提高呢?提前谢谢......
答案 0 :(得分:3)
这就是交换机的工作原理。如果您总是需要打印“确定”,请将其移至开关外:
$op = $_GET["operation"];
if (in_array($op, array("professionist", "company"))) {
echo "ok<br>";
}
switch ($op) {
case "professionist":
echo "inprofessionist<br>";
break;
case "company":
echo "incompany<br>";
break;
default:
echo "Meh!<br>";
break;
}
答案 1 :(得分:2)
case
只会定位具有给定值的第一个switch
。 (事实上,switch
每次执行只会涉及一个案例 - 虽然只是让你有多个案例共享一些代码,但其中只有一个是实际触发的。)
因此,让多个case
es具有与他们正在寻找的相同的值是没有意义的 - switch
语句与一系列独立if
语句不同{1}} S;它是跳跃目标的映射。
基本上,假设您有这样的开关:
w; // 001
switch ($foo) { // 002
case 'a':
w; // 003
case 'b':
x; // 004
break; // 005
case 'c':
y; // 006
}
z; // 007
实际上有效发生的事情就是你有效地得到了一些代码(注意:从实际工作的方式高度简化):
001 v
002 jump based on $foo: [a -> 003, b -> 004, c -> 006]
003 w
004 x
005 jump to 007
006 y
007 z
然后该程序从上到下运行。
$foo
为'a'的情况下,它跳转到003并从那里开始运行,这意味着它最终会完成v,jump,w,x,z
。$foo
为'b'的情况下,它会跳转到004并从那里开始运行,这意味着它最终会完成v,jump,x,z
。$foo
为'c'的情况下,它会跳转到006并从那里开始运行,这意味着它最终会完成v,jump,y,z
。