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:
Here, if $i is equal to 0, PHP would execute all of the
print statements! If $i is equal to 1, PHP would execute the
last two print statements. You would get the expected
behavior ('i equals 2' would be displayed) only if $i is
equal to 2. Thus, it is 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; |