switch

Het switch statement is gelijk aan een serie van IF statements met dezelfde expressie . Op veel plaatsen zul je dezelfde variabele ( of expressie ) willen vergelijken met meerdere waardes , en zul je een stuk code willen uitvoeren , dat afhangt van de waarde waarmee de expressie overeenkomt . Dit is precies waar het switch statement voor is .

De volgende twee voorbeelden zijn twee verschillende manieren om hetzelfde te doen , de één met een serie if statements , de andere met behulp van het switch statement :

 
if

 
(

 
$i

 
==

 
0

 
)

 
{

 
print

 
"i

 
is

 
gelijk

 
aan

 
0"

 
;

 
}

 
if

 
($i

 
==

 
1

 
)

 
{

 
print

 
"i

 
is

 
gelijk

 
aan

 
1"

 
;

 
}

 
if

 
($i

 
==

 
2

 
)

 
{

 
print

 
"i

 
is

 
gelijk

 
aan

 
2"

 
;

 
}

 
switch

 
($i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
2"

 
;

 
break

 
;

 
}





Het is belangrijk om te begrijpen hoe het switch statement precies werkt om fouten te voorkomen . Het switch statement voert regel voor regel ( eigenelijk , statement voor statement ) uit . In het begin wordt er geen code uitgevoerd . Alleen als er een case statement wordt gevonden met een waarde die overeenkomt met de waarde van de switch expressie begint PHP met het uitvoeren van statements . PHP gaat net zolang door met het uitvoeren van statements tot het einde van het switch blok , of totdat het voor de eerste keer een break statement tegenkomt . Als je geen break statement gebruikt aan het einde van de statement list die bij de " case " hoort , zal PHP doorgaan met het uitvoeren van statements die bij volgende cases horen . Zie het volgende voorbeeld :

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
0"

 
;

 
case

 
1

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
1"

 
;

 
case

 
2

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
2"

 
;

 
}





Als in het bovenstaande voorbeeld $i gelijk is aan 0 , zal PHP alle print statements uitvoeren ! Als $i gelijk is aan 1 , dan zal PHP de laatste twee print statements uitvoeren . Alleen als $i gelijk is aan 2 , krijg je het ' gewenste ' resultaat , dan wordt namelijk alleen het laaste print statement uitgevoerd . Het is dus belangrijk om geen break statements te vergeten . ( Onder bepaalde omstandigeheden kan het weglaten van de break statements juist wel nuttig zijn , zoals het voorbeeld hieronder laat zien .

In een switch statement , wordt de conditie maar één keer geevalueerd , vervolgends wordt de uitkomst van deze evaluatie vergeleken met de verschillende case statements . Bij een elseif statement wordt de conditie per elseif geevalueerd . Dit betekent dat je , als je een gecompliceerde evaluatie hebt , het gebruik van een switch statement wellicht sneller zou werken .

De statement list voor een case kan ook leeg zijn , op deze manier zal de controle meteen worden doorgegeven aan de volgende case :

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
case

 
1

 
:

 
case

 
2

 
:

 
print

 
"i

 
is

 
kleiner

 
dan

 
3

 
maar

 
niet

 
negatief"

 
;

 
break

 
;

 
case

 
3

 
:

 
print

 
"i

 
is

 
3"

 
;

 
}





De default case is een speciale . Deze case matched met alles dat niet is gematched door eerdere cases . Bijvoorbeeld :

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"i

 
is

 
niet

 
gelijk

 
aan

 
0

 
,

 
1

 
of

 
2"

 
;

 
}





De case expressie mag elke expressie zijn die evalueerd toe een simpel type , dit zijn integers , floating-point getallen en strings . Array ' s en objecten kunnen hier niet voor worden gebruikt .

De alternative syntax voor control structures wordt ook ondersteund voor switches . Voor meer informatie , zie Alternatieve syntax voor control structures .

 
switch

 
(

 
$i)

 
:

 
case

 
0

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
is

 
gelijk

 
aan

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"i

 
is

 
niet

 
gelijk

 
aan

 
0

 
,

 
1

 
of

 
2"

 
;

 
endswitch

 
;