| PHP Manual |
| Prev |
Chapter 11. Control Structures |
Next |
The switch statement is similar to a series of IF statements on the same
expression. In many occasions, you may want to compare the same variable (or expression) with many
different values, and execute a different piece of code depending on which value it equals to. This
is exactly what the switch statement is for.
The following two examples are two different ways to write the same thing, one using a
series of if statements, and the other using the switch statement:
if ($i == 0) {
print "i equals 0";
}
if ($i == 1) {
print "i equals 1";
}
if ($i == 2) {
print "i equals 2";
}
switch ($i) {
case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
}
|
It is important to understand how the switch statement is executed in order to
avoid mistakes. The switch statement executes line by line (actually, statement by
statement). In the beginning, no code is executed. Only when a case statement is found
with a value that matches the value of the switch expression does PHP begin to execute the
statements. PHP continues to execute the statements until the end of the switch block, or
the first time it sees a break statement. If you don't write a break statement at
the end of a case's statement list, PHP will go on executing the statements of the following case.
For example:
switch ($i) {
case 0:
print "i equals 0";
case 1:
print "i equals 1";
case 2:
print "i equals 2";
}
|
Here, if $i equals to 0, PHP would execute all of the print statements! If $i equals to 1,
PHP would execute the last two print statements, and only if $i equals to 2, you'd get the
'expected' behavior and only 'i equals 2' would be displayed. So, it's important not to forget
break statements (even though you may want to avoid supplying them on purpose under certain
circumstances).
In a switch statement, the condition is evaluated only once and the result is
compared to each case statement. In an elseif statement, the condition is
evaluated again. If your condition is more complicated than a simple compare and/or is in a tight
loop, a switch may be faster.
The statement list for a case can also be empty, which simply passes control into the
statement list for the next case.
switch ($i) {
case 0:
case 1:
case 2:
print "i is less than 3 but not negative";
break;
case 3:
print "i is 3";
}
|
A special case is the default case. This case matches anything that wasn't matched by the
other cases, and should be the last case statement. For example:
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";
}
|
The case expression may be any expression that evaluates to a simple type, that
is, integer or floating-point numbers and strings. Arrays or objects cannot be used here unless
they are dereferenced to a simple type.
The alternative syntax for control structures is supported with switches. For more
information, see Alternative syntax for
control structures .
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";
endswitch;
|
|