PHP切换通过问题

时间:2012-11-27 08:29:49

标签: php

代码:

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个案例运作完美,但是,如果例如操作是“公司”,那么交换机会继续“专业”案例,我做错了什么?怎么能提高呢?提前谢谢......

2 个答案:

答案 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