Η Προαιρετικότητα του break στην PHP
Η εντολή break είναι προαιρετική.
Χωρίς αυτήν, ωστόσο, η συμπεριφορά των μπλοκ case
θα είναι απρόσμενη. Ας δούμε ένα παράδειγμα.
Ας υποθέσουμε ότι έχουμε τον ακόλουθο κώδικα:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Ας αφαιρέσουμε όλες τις break, και στη μεταβλητή
$num ας γράψουμε αρχικά τον αριθμό 3.
Μέχρι εδώ όλα θα λειτουργούν όπως και πριν:
<?php
$num = 3; // ας είναι ο αριθμός εδώ 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Μετά την εκτέλεση ο κώδικας θα εμφανίσει 3 - όλα καλά
?>
Ας γράψουμε τώρα στη μεταβλητή $num
τον αριθμό 2. Σε αυτήν την περίπτωση, όπως αναμένεται,
θα εκτελεστεί το case 2, και στη συνέχεια απροσδόκητα
και το case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Μετά την εκτέλεση ο κώδικας θα εμφανίσει 2, και στη συνέχεια 3
?>
Εάν, ωστόσο, γράψουμε στη μεταβλητή $num
τον αριθμό 1, τότε θα εκτελεστούν όλες
οι κατασκευές case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Μετά την εκτέλεση ο κώδικας θα εμφανίσει 1, στη συνέχεια 2, και μετά 3
?>
Δηλαδή, συμβαίνει ότι στην απουσία break
μετά την εκτέλεση του προβλεπόμενου case,
εκτελούνται και όλα τα case κάτω από αυτό. Μερικές φορές
αυτό το χαρακτηριστικό χρησιμοποιείται, στην επίλυση προβλημάτων.
Στο επόμενο παράδειγμα, εάν η μεταβλητή $num
έχει τιμή 1 ή 2, τότε
στη μεταβλητή $res θα γραφεί 'a'.
Εάν, ωστόσο, η μεταβλητή $num έχει τιμή
3, τότε στη μεταβλητή $res
θα γραφεί 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Παραπάνω ανέφερα ότι μερικές φορές αυτό το χαρακτηριστικό χρησιμοποιείται, αλλά εγώ, γενικά, δεν συνιστώ να το χρησιμοποιείτε, καθώς ο κώδικας γίνεται όχι πολύ προφανής.
Είναι πιο προφανές να λυθεί ένα τέτοιο πρόβλημα με χρήση if:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>