SWITCH

SWITCH语句就象是对同一个表达式的一系列IF语句。在很多时侯,你想把同一个变量(或者表达式)和许多不同的值去比较 ,并根据不同的比较结果执行不同的程序段。这就是 SWITCH语句的用处了。

下面两个例子通过不同的方法做同一件事,一个用一组 IF语句,另外一个用 SWITCH 语句:

/* example 1 */
if ($i == 0) {
    print "i equals 0";
}
if ($i == 1) {
    print "i equals 1";
}
if ($i == 2) {
    print "i equals 2";
}

/* example 2 */
switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
}

弄懂SWITCH 语句怎样执行对于避免错误非常重要。SWITCH语句一行一行的执行(确切的说,是一句一句的)。在开始处,没有任何代码被执行。只有一个和SWITCH表达式的值相一致的CASE语句被发现, PHP开始执行下面的语句。PHP继续执行下面的语句直到整个SWITCH结束,或者碰到第一条BREAK语句。如果你在一种情况处理完后不写 BREAK 语句, PHP将继续执行下面情况才需执行的语句。例如:

/* example 3 */
switch ($i) {
  case 0:
    print "i equals 0";
  case 1:
    print "i equals 1";
  case 2:
    print "i equals 2";
}

这里,如果$i等于 0, PHP将执行所有的print语句! 如果 $i 等于 1, PHP 将执行后两条 print语句,只有  $i 等于 2 时, 你得到了想要的结果---只显示 'i equals 2'。所以,千万不要忘了写 BREAK 语句(尽管你在特定情况下可能想避免它们)。

有一种特别的情况是默认情况。这种情况和任何其他情况不匹配的情况相匹配。例如:

/* example 4 */
switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
    default:
        print "i is not equal to 0, 1 or 2";
}

另外一点值得注意的是 CASE 表达式可以是任何有界的类型,整形或者实形以及字符串形。数组和对象虽然不会破坏 PHP, 但在这里没有任何意思。