Break-i mittekohustuslikkus PHP-s
Käsk break on mittekohustuslik.
Ilma selleta on aga plokkide case
käitumine ootamatu. Vaatame näite peal.
Olgu meil selline kood:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Eemaldame sellest kõik break-id, ja muutujasse
$num paneme alustuseks numbri 3.
Alguses töötab kõik nagu ennegi:
<?php
$num = 3; // olgu siin number 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Pärast käivitamist kood väljastab 3 - kõik korras
?>
Paneme nüüd muutujasse $num
numbri 2. Sel juhul käivitatakse ootuspäraselt
case 2, ja siis ootamatult
ka case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Pärast käivitamist kood väljastab 2 ja siis 3
?>
Kui muutujasse $num panna
number 1, siis käivituvad üldse kõik
konstruktsioonid case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Pärast käivitamist kood väljastab 1, siis 2 ja siis 3
?>
See tähendab, et break-i puudumisel
pärast soovitud case täitmist
käivituvad ka kõik case-id allpool seda. Mõnikord
kasutatakse seda omadust ülesannete lahendamisel.
Järgmises näites, kui muutuja $num
omab väärtust 1 või 2, siis
muutujasse $res kirjutatakse 'a'.
Kui muutuja $num omab väärtust
3, siis muutujasse $res
kirjutatakse 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Eespool ma kirjutasin, et mõnikord kasutatakse seda omadust, kuid üldiselt ma ei soovita seda kasutada, sest kood muutub mitte väga ilmseks.
Ilmsem on selline ülesanne lahendada if-ide abil:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>