Optioneel karakter van break in PHP
De opdracht break is optioneel.
Zonder deze zal het gedrag van de case blokken
echter onverwacht zijn. Laten we kijken naar een voorbeeld.
Stel dat we de volgende code hebben:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Laten we hier alle break verwijderen, en in de variabele
$num om te beginnen het getal 3 zetten.
In eerste instantie zal alles werken zoals voorheen:
<?php
$num = 3; // stel hier staat getal 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Na het uitvoeren zal de code 3 weergeven - alles in orde
?>
Laten we nu in de variabele $num het
getal 2 zetten. In dit geval zal naar verwachting
case 2 uitgevoerd worden, en dan onverwacht
ook nog case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Na het uitvoeren zal de code 2, en dan 3 weergeven
?>
Als we in de variabele $num het
getal 1 zetten, dan zullen zelfs alle
case constructies uitgevoerd worden:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Na het uitvoeren zal de code 1, dan 2, en dan 3 weergeven
?>
Het blijkt dus dat bij afwezigheid van break,
na uitvoering van de beoogde case,
ook alle case eronder uitgevoerd worden. Soms
wordt deze eigenschap gebruikt bij het oplossen van problemen.
In het volgende voorbeeld, als de variabele $num
de waarde 1 of 2 heeft, dan
wordt in de variabele $res 'a' opgeslagen.
Als de variabele $num de waarde
3 heeft, dan wordt in de variabele $res
'b' opgeslagen:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Hierboven schreef ik dat deze eigenschap soms gebruikt wordt, maar ik raad het over het algemeen niet aan om hem te gebruiken, omdat de code dan niet erg duidelijk meer is.
Het is duidelijker om zo'n probleem met if-statements op te lossen:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>