Επιμέλεια Ι.Κονταξάκης

 

  1.       Οι Δομές Ελέγχου (Control Structures)

 

Η Εντολή If  (Εντολή απόφασης)

Η PHP, όπως όλες οι γλώσσες προγραμματισμού, παρέχει δυνατότητες για να επηρεάσουμε τη ροή ελέγχου (flow of control) σ’ ένα script, δηλ. περιέχει ειδικές εντολές που μας επιτρέπουν να παρεκκλίνουμε από τη σειριακή σειρά εκτέλεσης των εντολών που έχουμε δει μέχρι τώρα. Αυτές οι εντολές αποκαλούνται δομές ελέγχου (control structures).

Η βασικότερη και πιο συχνά χρησιμοποιούμενη δομή ελέγχου είναι η εντολή if-else, η σύνταξη της οποίας είναι η εξής :

if ( <συνθήκη> ) {

            // Εντολή(ές) που θα εκτελεσθούν αν η <συνθήκη>

            // είναι αληθής (true)

} else {

            // (Προαιρετικές) Εντολές που θα εκτελεσθούν

// αν η <συνθήκη> είναι ψευδής (false)

}

Αυτή η δομή ελέγχου μάς δίνει τη δυνατότητα να πούμε στην PHP να εκτελέσει ένα σύνολο εντολών ή κάποιο άλλο ανάλογα με το αν κάποια συνθήκη είναι true ή false. Ακολουθεί ένα παράδειγμα για το αρχείο welcome. php που δημιουργήσαμε προηγουμένως :

if ( $name == "Kevin" ) {

            echo( "Καλώς ήρθες, μεγάλε!" );

} else {

            echo( "Καλώς ήρθες, $name!" );

}

Τώρα, αν η μεταβλητή name που μεταβιβάζεται στη σελίδα έχει την τιμή Kevin, θα εμφανισθεί ένα ειδικό μήνυμα. Αλλιώς, θα εμφανισθεί ένα συνηθισμένο μήνυμα που θα περιέχει το όνομα που καταχώρησε ο χρήστης.

Η δήλωση else είναι προαιρετική. Αν θελήσουμε να εμφανίσουμε το ειδικό μήνυμα αν έχει καταχωρηθεί το κατάλληλο όνομα και αν όχι να μην εμφανισθεί τίποτα, ο κώδικας είναι ο εξής :

if ( $name == "Kevin" ) {

            echo( "Καλώς ήρθες, μεγάλε!" );

}

Το σύμβολο = = που χρησιμοποιήσαμε στην παραπάνω συνθήκη είναι ο τελεστής που χρησιμοποιεί η PHP για να συγκρίνει δύο τιμές και να διαπιστώσει αν είναι ίσες. Δεν πρέπει να ξεχνάμε να γράφουμε και τα δύο =, επειδή το ένα = είναι ο τελεστής εκχώρησης (assignment operator) και αντί να συγκρίνει τις δύο τιμές, κάνει εκχώρηση τιμής στη μεταβλητή.

Μπορούμε να έχουμε και πιο πολύπλοκες συνθήκες από μια απλή σύγκριση για ισότητα. Τροποποιήσαμε προηγουμένως το αρχείο welcome.php3 για να έχουμε τις μεταβλητές firstname και lastname. Αν θελήσουμε να εμφανίσουμε ένα μήνυμα μόνο για ένα συγκεκριμένο άτομο, θα πρέπει να ελέγξουμε τις τιμές και από τα δύο ονόματα με τον λογικό τελεστή and, ως εξής :

if ( "Kevin" == $firstname and "Yank" == $lastname ) {

echo( "Καλώς ήρθες, μεγάλε!" );

}

Η παραπάνω συνθήκη θα είναι αληθής (true) αν και μόνο αν η $firstname έχει την τιμή Kevin και η $lastname έχει την τιμή Yank. Ο τελεστής and στην παραπάνω συνθήκη επιστρέφει την τιμή true αν και οι δύο συγκρίσεις αποτιμηθούν σε true.

Ένας άλλος λογικός τελεστής είναι ο or, ο οποίος επιστρέφει τιμή true αν η μια ή και οι δύο συνθήκες είναι true. Αν είστε περισσότεροι εξοικειωμένοι με την JavaScript ή την C, ο τελεστής && και ο || για το and και το or αντίστοιχα, δουλεύουν εξίσου καλά και στην PHP.

 

 

Η Εντολή Elseif

Η εντολή elseif είναι ένας συνδυασμός των εντολών if και if …else. Επεκτείνει μια εντολή if για να εκτελέσει μια διαφορετική εντολή στην περίπτωση που η έκφραση της εντολής if αποτιμηθεί σε FALSE, αλλά θα εκτελέσει αυτήν την εναλλακτική έκφραση μόνο αν η συνθήκη έκφρασης της elseif αποτιμηθεί σε TRUE.

Για παράδειγμα, ο επόμενος κώδικας ελέγχει τρεις περιπτώσεις και θα εμφανίσει ένα ανάλογο μήνυμα αν το a είναι μεγαλύτερο, ίσο ή μικρότερο από το b :

if ($a > $b) {

print "Το a είναι μεγαλύτερο από το b";

} elseif ($a == $b) {

print "Το a είναι ίσο με το b";

} else {

print "Το a είναι μικρότερο από το b";

}

 

 

Η Εντολή Switch

Η εντολή switch είναι παρόμοια με μια σειρά εντολών if στην ίδια έκφραση. Υπάρχουν πολλές περιπτώσεις όπου θέλουμε να συγκρίνουμε την ίδια μεταβλητή ή έκφραση με πολλές διαφορετικές τιμές και να εκτελέσουμε ένα διαφορετικό κομμάτι κώδικα ανάλογα με την τιμή της μεταβλητής.

Τα δύο επόμενα παραδείγματα είναι δύο διαφορετικοί τρόποι για να γράψουμε το ίδιο πράγμα, όπου το ένα χρησιμοποιεί μια σειρά από εντολές if και το άλλο χρησιμοποιεί την εντολή switch :

if ($i == 0) {

print "Το i είναι ίσο με 0";

}

if ($i == 1) {

print "Το i είναι ίσο με 1";

}

if ($i == 2) {

print "Το i είναι ίσο με 2";

}

 

switch ($i) {

case 0:

print "Το i είναι ίσο με 0";

break;

case 1:

print "Το i είναι ίσο με 1";

break;

case 2:

print "Το i είναι ίσο με 2";

break;

}

Μόλις η εντολή switch βρει μια εντολή case με μια τιμή που να ταιριάζει με την τιμή της έκφρασης της switch, η PHP αρχίζει να εκτελεί τις εντολές. Η PHP συνεχίζει να εκτελεί τις εντολές μέχρι το τέλος του μπλοκ της switch ή μόλις συναντήσει μια εντολή break.

Αν δεν συμπεριλάβουμε μια εντολή break στο τέλος μιας εντολής case, η PHP θα συνεχίσει να εκτελεί τις εντολές και από τις επόμενες εντολές case, όπως για παράδειγμα :

switch ($i) {

case 0:

print "Το i είναι ίσο με 0";

case 1:

print "Το i είναι ίσο με 1";

case 2:

print "Το i είναι ίσο με 2";

}

Εδώ, αν το $i είναι ίσο με 0, η PHP θα εκτελέσει όλες τις εντολές print, αν το $i είναι ίσο με 1, η PHP θα εκτελέσει τις δύο τελευταίες εντολές print και μόνο αν το $i είναι ίσο 2, θα έχουμε την αναμενόμενη συμπεριφορά και θα εκτελεσθεί μόνο η τελευταία εντολή print.

Μια εντολή case μπορεί να είναι κενή και έτσι ο έλεγχος να μεταβιβασθεί στην επόμενη εντολή case.

switch ($i) {

case 0:

case 1:

case 2:

print "Το i είναι μικρότερο από 3 αλλά όχι αρνητικό";

break;

case 3:

print "Το i είναι ίσο με 3";

}

Μια ειδική περίπτωση case αποτελεί το default case, το οποίο ταιριάζει μ’ ο,τιδήποτε δεν ταίριαξε από τις άλλες cases. Για παράδειγμα :

switch ($i) {

case 0:

print "Το i είναι ίσο με 0";

break;

case 1:

print "Το i είναι ίσο με 1";

break;

case 2:

print "Το i είναι ίσο με 2";

break;

default:

print "Το i δεν είναι ίσο με 0, 1 ή 2";

}

Η εναλλακτική σύνταξη των δομών ελέγχου υποστηρίζεται και στην εντολή switch.

switch ($i):

case 0:

print "Το i είναι ίσο με 0";

break;

case 1:

print "Το i είναι ίσο με 1";

break;

case 2:

print "Το i είναι ίσο με 2";

break;

default:

print "Το i δεν είναι ίσο με 0, 1 ή 2";

endswitch;