Break neprivalomumas PHP
Komanda break yra neprivaloma.
Be jos, tačiau, case blokų elgsena
bus netikėta. Pažiūrėkime pavyzdžiu.
Tarkime, mes turime tokį kodą:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Pašalinkime jame visus break, o į kintamąjį
$num pradžiai įrašykime skaičių 3.
Kol kas viskas veiks taip, kaip ir veikė:
<?php
$num = 3; // tarkime čia skaičius 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Paleidus kodas išves 3 - viskas gerai
?>
Dabar į kintamąjį $num įrašykime
skaičių 2. Šiuo atveju mūsų tikimasi
vyks case 2, o po to netikėtai
dar ir case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Paleidus kodas išves 2, o po to 3
?>
Jei į kintamąjį $num įrašyti
skaičių 1, tai išvis vyks visos
case konstrukcijos:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Paleidus kodas išves 1, po to 2, o po to 3
?>
Tai pasirodo, kad be break,
po numatyto case vykdymo,
vykdomi ir visi case žemiau jo. Kartais
šią ypatybę naudoja, sprendžiant uždavinius.
Kitame pavyzdyje, jei kintamasis $num
turi reikšmę 1 arba 2, tai
į kintamąjį $res bus įrašyta 'a'.
Jei kintamasis $num turi reikšmę
3, tai į kintamąjį $res
bus įrašyta 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Aukščiau rašiau, kad kartais šią ypatybę naudoja, bet aš, generally, nerekomenduoju jos naudoti, nes kodas tampa ne labai akivaizdus.
Akivaizdžiau išspręsti tokį uždavinį su if:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>