Συνθήκες (if, else, elseif, switch)

Ένα πρόγραμμα αποτελείται από ένα σύνολο εντολών και συνθηκών. Οι εντολές λένε στον Η/Υ τί να κάνει, ενώ οι συνθήκες εξετάζουν περιπτώσεις.

Μια εντολή μπορεί να είναι π.χ. Τύπωσε ένα μήνυμα στην οθόνη, ενώ μια συνθήκη μπορεί να εξετάζει π.χ. εάν η ηλικία είναι πάνω από 7 ετών θα υπολογίζεται η τιμή του εισιτηρίου στα 5 ευρώ, ενώ αν η ηλικία είναι κάτω από 7 ετών τότε να υπολογίζεται η τιμή στα 2 ευρώ.

Οι συνθήκες μας βοηθάνε να εκτελούμε διαφορετικά κομμάτια κώδικα ανάλογα με το αποτέλεσμα της συνθήκης.

Η php διαβάζει μια προς μια τις εντολές και τις συνθήκες και αντίστοιχα τις εκτελεί.

Τελεστές Ελέγχου (Relational Operators)

Ο έλεγχος των συνθηκών, πραγματοποιείται χρησιμοποιώντας τους λεγόμενους τελεστές ελέγχου. Τα σύμβολα των τελεστών είναι αυτά: >, <, <=, >=, ==, !=, &&, ||.

Τελεστής Περιγραφή
> Μεγαλύτερο από. π.χ. x > 5, ελέγχει εάν το x είναι μεγαλύτερο από 5
< Μικρότερο από. π.χ. x < 5, ελέγχει εάν το x είναι μικρότερο από 5
<= Μικρότερο ή ίσο. π.χ. x <= 5, ελέγχει εάν το x είναι μικρότερο ή ίσο με 5
>= Μεγαλύτερο ή ίσο. π.χ. x >= 5, ελέγχει εάν το x είναι μεγαλύτερο ή ίσο με 5
== Έλεγχος ισότητας. π.χ. x == 5, ελέγχει εάν το x είναι ίσο με 5
!= Δεν είναι ίσο. π.χ. x != 5, ελέγχει την περίπτωση που το x δεν είναι 5
&& Έλεγχος ΚΑΙ. π.χ. x < 5 && x > 3, ελέγχει εάν το x είναι μικρότερο από 5 ΚΑΙ μεγαλύτερο από 3.
|| Έλεγχος Ή. π.χ. x == 5 || x == 3, ελέγχει εάν το x είναι ίσο με 5 Ή ίσο με 3.

Οι παραπάνω τελεστές χρησιμοποιούνται στις εντολές if και elseif με σκοπό τον έλεγχο των συνθηκών. Για παράδειγμα εάν θέλουμε να ελέγξουμε εάν ο χρήστης είναι ενήλικας, με τη συγκεκριμένη συνθήκη if ($age > 18), ελέγχουμε εάν η ηλικία του χρήστη είναι μεγαλύτερη από 18. Εάν όντως είναι μεγαλύτερη, τότε είναι ενήλικας, διαφορετικά είναι ανήλικος. Σε γενικές γραμμές κάπως έτσι χρησιμοποιούνται οι τελεστές.

Εντολή if

Με την εντολή if, ξεκινάει η συνθήκη μας, ελέγχοντας εάν είναι αληθής (true) ή ψευδής (false). Πάντα μια συνθήκη ξεκινάει με την εντολή if και ο κώδικας περικλείεται εντός των αγκίστρων {}. Ουσιαστικά τα άγκιστρα καθορίζουν την εμβέλεια της συνθήκης που περιέχει τον κώδικα που θα εκτελεστεί ανά περίπτωση. Αυτό συμβαίνει γιατί ένα πρόγραμμα αποτελείται από πολλαπλά κομμάτια ξεχωριστά μεταξύ τους. Συνεπώς, τα άγκιστρα χρησιμεύουν ώστε να διακρίνουμε τα κομμάτια αυτά.

Για παράδειγμα, εάν είχαμε δύο if στο πρόγραμμά μας, θα ήταν δύσκολο να διακρίνουμε εμείς και η php πού τελειώνει η μια if και πού αρχίζει η άλλη. Στο παρακάτω παράδειγμα θα δείτε μια απλή σύνταξη μιας συνθήκης με την if

Παράδειγμα

1.  $x = 3;
2.  if ($x == 3)
3.  {
4.    echo "x is 3";
5.  }

Αποτέλεσμα:

x is 3

Γραμμή 1: Αρχικοποιούμε τη μεταβλητή x θέτοντας τη τιμή 3.

Γραμμή 2: Ελέγχουμε εάν η x είναι ίση με 3. Εάν αυτό ισχύει, δηλαδή εάν είναι TRUE (Αληθές) τότε τύπωσε το μήνυμα x is 3, διαφορετικά μη κάνεις τίποτα. Στο αποτέλεσμα βλέπουμε ότι τυπώνεται το μήνυμα x is 3 γιατί πολύ απλά ο έλεγχος της if είναι αληθής, δηλαδή η x όντως είναι ίση με 3 (όπως ορίστηκε στη γραμμή 2).

Εντολή else

Η else είναι μια προέκταση της if, η οποία ενεργοποιείται όταν η if επιστρέψει false. Σε αυτή την περίπτωση, εκτελείται ο κώδικας που βρίσκεται εντός της else. Δείτε το παρακάτω παράδειγμα για να καταλάβετε καλύτερα την χρησιμότητά της.

Παράδειγμα

$x = 1;    //Αρχικοποιούμε την μεταβλητή x με την τιμή 1.

if ($x == 3)  // Έλεγχος αν η $x ισούται με 3.
{
    echo "x is 3";  // Αν η $x ισούται με 3 τότε εμφάνισε στην οθόνη
}                   // "x is 3".
else  
{
    echo "x is NOT 3";
}

Αποτέλεσμα:

x is NOT 3

Στο σημείο if ($x == 3) γίνεται ο έλεγχος εάν η x είναι ίση με 3. Επειδή όμως δεν είναι η x=3, τότε παρακάμπτεται ο κώδικας που βρίσκεται εντός της if και εκτελείται ο κώδικας της else τυπώνοντας το μήνυμα x is NOT 3.

Για να γίνει καλύτερα κατανοητό, το παραπάνω παράδειγμα λέει στην καθομιλουμένη: Εάν το x ισούται με 3, τότε τύπωσε το μήνυμα x is 3, ΔΙΑΦΟΡΕΤΙΚΑ (δηλ. else), τύπωσε το μήνυμα x is NOT 3. Το ΔΙΑΦΟΡΕΤΙΚΑ θα μπορούσε να μεταφραστεί και ως “σε κάθε άλλη περίπτωση”. Γενικά να έχετε στο μυαλό σας ότι η else χρησιμοποιείται στο τέλος εάν δεν ισχύει κανένας από τους παραπάνω ελέγχους των if.

Εντολή elseif

Η elseif χρησιμοποιείται για πολλαπλές συνθήκες-ερωτήματα. Η elseif (else if) σημαίνει “αλλιώς εάν / διαφορετικά εάν”. Για παράδειγμα, στη πρώτη if αν δεν ισχύει η συνθήκη της, τότε είναι false. Συνεπώς υπερ-πηδάει τον κώδικα της πρώτης if, και προχωράει το πρόγραμμα στην επόμενη συνθήκη που είναι η elseif. Eάν κάπoια από τις elseif είναι αληθής, τότε μπαίνει στον κώδικα της συγκεκριμένης elseif και τον εκτελεί. Πάμε να δούμε ακόμα ένα παράδειγμα με δύο ελέγχους, με μια if και μια elseif:

Παράδειγμα

1.  # Example 2
2.  $x = 4;
3.  if ($x == 3) {
4.    echo "x is 3";
5.  } elseif ($x == 4) {
6.    echo "x is 4";
7.  }

Αποτέλεσμα:

x is 4

Στον παραπάνω κώδικα πλέον έχουμε βάλει δυο ελέγχους. Ο ένας γίνεται στην γραμμή 3 χρησιμοποιώντας την if, ενώ ο δεύτερος γίνεται στην γραμμή 5 με την elseif. Η elseif σημαίνει “διαφορετικά εάν”. Στην καθομιλουμένη λέμε στον παραπάνω κώδικα,

Γρραμμή 3: Eάν $x==3, δηλαδή εάν ισχύει η συνθήκη $x==3, τότε το αποτέλεσμα είναι TRUE και εκτελείται ο κώδικας που βρίσκεται στη γραμμή 4, διαφορετικά εάν ισχύει $x==4, επέστρεψε TRUE και εκτέλεσε τον κώδικα στη γραμμή 6. Εκτελώντας τον παραπάνω κώδικα θα λάβουμε το μήνυμα: x is 4

Σημείωση: Ο έλεγχος της ισότητας στην php καθώς και στις περισσότερες γλώσσες προγραμματισμού δηλώνεται με διπλό σύμβολο της ισότητας δηλ. (==). Αυτό συμβαίνει γιατί όπως είδαμε σε προηγούμενο κεφάλαιο των μεταβλητών, το μονό σύμβολο της ισότητας (=) χρησιμοποιείται για την εκχώρηση τιμής σε μια μεταβλητή.

Για παράδειγμα εάν θέλουμε να περάσουμε την τιμή 5 στην μεταβλητή x, τότε γράφουμε $x=5 και έτσι, το 5 καταχωρείται στην μεταβλητή x. Ενώ εάν θέλουμε να συγκρίνουμε δύο τιμές αν είναι ίσες, τότε χρησιμοποιούμε το διπλό ίσον (==).

Ερώτηση κρίσεως, γιατί στο παραπάνω παράδειγμα χρησιμοποιήσαμε την elseif και όχι ξανά ακόμα μια if; Η απάντηση είναι σχετικά απλή. Εάν είχαμε να κάνουμε 10 ελέγχους, στην περίπτωση που χρησιμοποιούσαμε if και στους 10 ελέγχους, τότε κατά την εκτέλεση το πρόγραμμά μας θα έπρεπε να μπει και στους 10 ελέγχους.

Αυτό σημαίνει πως εάν π.χ. ίσχυε ο 3ος έλεγχος, τότε θα συνέχιζε να κάνει και τους υπόλοιπους 7 ελέγχους. Αυτό πρακτικά σημαίνει καθυστέρηση και πιο συγκεκριμένα αργό πρόγραμμα.

Από την άλλη, για να βελτιστοποιήσουμε το παραπάνω παράδειγμα, χρησιμοποιήσαμε τις elseif. Συγκεκριμένα, έστω οτι πάλι είχαμε να κάνουμε 10 ελέγχους, εάν ένας έλεγχος ίσχυε, τότε θα παρέκαμπτε όλους τους υπόλοιπους ελέγχους, και θα συνέχιζε το πρόγραμμα από το τελευταίο άγκιστρο } (που δηλώνει το τέλος της if) και μετά. Για να γίνει ακόμα πιο κατανοητό, δείτε το παρακάτω παράδειγμα:

Παράδειγμα

1.  # Example 3
2.  $x = 5;
3.  if ($x == 3) {
4.    echo "x is 3";
5.  } elseif ($x == 4){
6.    echo "x is 4";
7.  } elseif ($x == 5){
8.    echo "x is 5";
9.  } elseif ($x == 6){
10.   echo "x is 6";
11. } elseif ($x == 7){
12.   echo "x is 7";
13. }

Αποτέλεσμα:

x is 5

Μόλις εκτελέσουμε τον παραπάνω κώδικα, η php θα ακολουθήσει τα παρακάτω 5 βήματα:

  1. Στην γραμμή 3 θα ελέγξει εάν η μεταβλητή x είναι ίση με 3, το οποίο είναι αναληθές (FALSE) γιατί η x δεν είναι ίση με 3
  2. στη συνέχεια πάμε στη γραμμή 5, γίνεται ο έλεγχος εάν η x είναι ίση με 4, και αυτό είναι αναληθές (FALSE), γιατί η x δεν είναι ίση με 4
  3. πάμε στη γραμμή 7, γίνεται ο έλεγχος εάν η x είναι ίση με 5. Αυτό όντως ισχύει (TRUE) και είναι αληθές. Γιατί στην γραμμή 2 θέσαμε την τιμή της μεταβλητής x να είναι ίση με 5.
  4. Εκτελεί τη γραμμή 8, η οποία τυπώνει ένα μήνυμα στην οθόνη x is 5.
  5. από εδώ και πέρα εφόσον βγήκε μια συνθήκη αληθής, και συγκεκριμένα η γραμμή 7, η php αγνοεί τους υπόλοιπους ελέγχους (δηλ. τις υπόλοιπες elseif) και πάει κατευθείαν στη γραμμή 13 η οποία είναι το τέλος της if. Εάν συνέχιζε ο κώδικάς μας πέραν της γραμμής 13, δηλαδή εάν είχαμε και άλλες γραμμές κώδικα, τότε η php θα συνέχιζε την εκτέλεση του υπόλοιπου κώδικα κανονικά.

Όπως θα δείτε, στον παρακάτω κώδικα, στην αντίθετη περίπτωση εάν είχαμε μόνο if αντί για elseif, η php θα συνέχιζε να κάνει και τους υπόλοιπους ελέγχους απλά εκτελώντας περιττούς ελέγχους καθυστερώντας το πρόγραμμά μας χωρίς λόγο. Δείτε τον κώδικα:

1.  # Example IFs
2.  $x = 5;
3.  if ($x == 3) {
4.    echo "x is 3";
5.  }
6.  if ($x == 4) {
7.    echo "x is 4";
8.  }
9.  if ($x == 5) {
10.   echo "x is 5";
11. }
12. if ($x == 6) {
13.   echo "x is 6";
14. }
15. if ($x == 7) {
16.   echo "x is 7";
17. }

Αποτέλεσμα:

x is 5

Ο παραπάνω κώδικας όπως είδατε, θα λειτουργήσει κανονικά, αλλά θα είναι πιο αργός γιατί όπως αναφέρθηκε και πιό πάνω, θα προχωρήσει η php στον έλεγχο όλων των if.

Σε αυτό το σημείο, βλέπετε ξεκάθαρα ότι σκοπός μας δεν είναι απλά η γραφή κώδικα ο οποίος να δουλεύει, αλλά και να είναι σωστά γραμμένος ώστε να είναι γρήγορος χρησιμοποιώντας όσο γίνεται λιγότερους πόρους του συστήματος.

Προσοχή του ίσον = με το διπλό ίσον ==

Ένα από τα συχνότερα λάθη που κάνουν οι αρχάριοι προγραμματιστές είναι το = με το ==. Αν και φαίνονται παρόμοια, η διαφορά τους είναι μεγάλη.

Με το μονό = εισάγουμε μια τιμή σε μια μεταβλητή ή περνούμε μια τιμή από μια μεταβλητή σε μια άλλη μεταβλητή. Συγκεκριμένα,

$age = 15;

Μπορούμε όμως να περάσουμε την τιμή της $age σε μια άλλη μεταβλητή, π.χ. Την $new_age κάπως έτσι,

$new_age = $age;

Τώρα η $new_age έχει την τιμή 15 την οποία την πήρε από την $age.

Το διπλό ίσον από την άλλη ==, χρησιμοποιείται για έλεγχο όπως είδαμε στις συνθήκες. Για παράδειγμα το χρησιμοποιούμε για να ελέγξουμε εάν δύο μεταβλητές περιέχουν την ίδια τιμή. Για παράδειγμα,

$age == $new_age

Εάν η $age έχει την τιμή 15 και η $new_age έχει τη τιμή 15, τότε είναι ίσες. Επομένως η παρακάτω συνθήκη είναι αληθής (true),

if ($age == $new_age) { ... }

Εν ολίγοις αυτές είναι οι διαφορές. Να έχετε το νου σας λοιπόν πού βάζετε διπλό ίσον και πού μονό.

Switch

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

Ο τρόπος σύνταξης της switch έχει συγκεκριμένο τρόπο και γίνεται ως εξής:

switch(μεταβλητή)
{
 case περίπτωση πρώτη:
   // εντολές που εκτελούνται...
 break;
 
 case περίπτωση δεύτερη:
   // εντολές που εκτελούνται στην δεύτερη περίπτωση...
 break;
 
 default:
 // εντολές που εκτελούνται όταν δεν βρεθεί καμία από τις παραπάνω περιπτώσεις...
}
  • Όπου μεταβλητή εισάγουμε το όνομα της μεταβλητής που θέλουμε να μελετήσουμε.
  • Όπου περίπτωση πρώτη εισάγουμε τον έλεγχο που θέλουμε να κάνουμε σε αυτή την περίπτωση, ότι θα βάζαμε δηλαδή στις παρενθέσεις της if. Παρομοίως για την περίπτωση δεύτερη, περίπτωση τρίτη κ.ο.κ.
  • Η εντολή break σημαίνει ότι θα σταματήσει η php την εκτέλεση του κώδικα της switch στο σημείο όπου θα βρεθεί, διαφορετικά η php θα εκτελούσε όλες τις εντολές από το σημείο που βρήκε την case που ταιριάζει με την περίπτωση. Όλες οι εντολές για κάθε περίπτωση ξεκινούν από την άνω και κάτω τελεία του case και τελειώνουν στο break.
  • Το default χρησιμοποιείται για όλες τις άλλες περιπτώσεις που δεν υπάρχουν σε case, είναι δηλαδή το else της switch.

Ας δούμε ένα απλό παράδειγμα εφαρμόζοντας την switch.

Όνομα αρχείου: temperature.php

<?php
$temperature = 21;

switch($temperature)
{
  case ($temperature<15):
    echo "Πρέπει να πάρεις μπουφάν.";
  break;

  case ($temperature>15 && $temperature<22):
    echo "Πρέπει να πάρεις ζακέτα.";
  break;

  case ($temperature>=22):
    echo "Δεν χρειάζεται να πάρεις μπουφάν.";
  break;

  default:
    echo "Δεν εισήχθη θερμοκρασία.";
}
?>

Αποτέλεσμα:

Πρέπει να πάρεις ζακέτα.

Χρήσιμες Ορολογίες

Μέχρι αυτό το σημείο χρησιμοποιούσαμε κοινές λέξεις για να περιγράφονται οι έννοιες προγραμματισμού. Σε αυτό το σημείο έφτασε η στιγμή να εξοικειωθείτε με ορισμένες προγραμματιστικές απλές ορολογίες. Θα γίνει αναφορά των παρακάτω ορολογιών καθώς θα τις χρειαστούμε στα επόμενα κεφάλαια.

Τιμή (Value)

(ουσιαστικό) Οτιδήποτε μπορεί να αποθηκευθεί σε μια μεταβλητή ονομάζεται τιμή. Για παράδειγμα η τιμή της μεταβλητής $age είναι 24. Σε προηγούμενα κεφάλαια είδαμε τους κυριότερους τύπους μεταβλητών όπως string, integer, double κλπ. Υπενθυμίζουμε ότι κάθε τύπος μεταβλητής δέχεται συγκεκριμένες τιμές.

Ανάθεση (Assign)

(ρήμα) Ανάθεση ή αρχικοποίηση είναι όταν ορίζουμε μια συγκεκριμένη τιμή σε μια μεταβλητή. Π.χ. Αρχικοποιήσαμε τη τιμή Steve στην μεταβλητή $first_name, δηλαδή $first_name = "Steve";

Παράμετρος (Argument)

(ουσιαστικό) Στις συναρτήσεις (functions) που θα δούμε παρακάτω όταν καλούμε μια συνάρτηση με το όνομά της ενδεχομένως να δέχεται και παραμέτρους π.χ. η echo δέχεται μια παράμετρο η οποία είναι το μήνυμα που θα εμφανίσει στην οθόνη: echo "hello!";

Τιμή Επιστροφής (Return Value)

(ουσιαστικό) Οι functions όταν ολοκληρώσουν την εκτέλεσή τους επιστρέφουν τιμή. Για παράδειγμα έστω ότι έχουμε την function Add η οποία προσθέτει 2 αριθμούς τον 5 και τον 7. Εάν την καλέσουμε κάπως έτσι: $sum = add(5,7); θα επιστρέψει το άθροισμα 12 στην μεταβλητή $sum.