Pages

Friday, December 10, 2010

PHP Common Mistakes: Ο τελεστής '==='

Μετά από ένα τρίωρο που έφαγα χθες κοιτώντας 4 γραμμές κώδικα αποφάσισα να γράψω αυτό το ποστ ώστε να μην κάτσει και χάσει κι άλλος κόσμος την ώρα του σε τέτοια ηλίθια bugs που σου 'ρχεται να κάνεις κάτι τέτοιο:

Photobucket



Όλα ξεκίνησαν όταν αποφάσισα να χρησιμοποιήσω την array_search():
Η συνάρτηση αυτή όπως ίσως υποπτεύεται κανείς ψάχνει έναν πίνακα για ένα στοιχείο και αν το βρει επιστρέφει τη θέση στην οποία βρέθηκε ή -αν δεν το βρει- επιστρέφει false.

Ακολουθεί λανθασμένο παράδειγμα (σχεδόν παρόμοιο με αυτό που παιδευόμουν χθες) :

$found = array_search($timi, $pinakas);
if($found)
{
   echo 'Vrethike!';
}


Αν στο παραπάνω κομμάτι κώδικα η τιμή που ψάχνουμε είναι στον πίνακα δουλεύει κανονικά ΕΚΤΟΣ από την περίπτωση που είναι στην πρώτη θέση (τη θέση 0) του πίνακα.

Επειδή το 0 θεωρείται ως false, αν η τιμή που δώσαμε βρεθεί στη θέση αυτή τότε ο παραπάνω κώδικας δεν θα δουλέψει.

Για να δουλέψει πρέπει να κάνουμε χρήση του τελεστή '==='.

Επειδή η PHP είναι πολύ χαλαρή σε θέματα τύπων μεταβλητών το διπλό ίσον μπορεί να επιστρέψει true σε διάφορες περιπτώσεις:

        $i = 3;   //arithmos
        $j = "3"; //string
       
        if($i == $j) //isxuei i isotita
        {
             echo 'It works!';
        }


Κάνοντας χρήση του 3πλού '=' αποφεύγουμε τέτοια προβλήματα:


        $i = 3;   //arithmos
        $j = "3"; //string
       
        if($i === $j) //den isxuei i isotita
        {
             echo 'It works!';
        }


Βάσει αυτών το πρώτο -λανθασμένο- κομμάτι κώδικα γίνεται:

        $found = array_search($timi, $pinakas);
        if($found === false)
        {
            echo 'Vrethike!';
        }

4 comments:

  1. Τον τελεστή 8=====) έπρεπε να βάλεις!

    ReplyDelete
  2. Τι 'ναι αυτά ρε παιδιά??? Εγώ κάτι για μπύρες είδα και μπήκα! :ΡΡΡ

    ReplyDelete
  3. @natasssa Μααα... για μπύρες γράφει!

    ReplyDelete
  4. Πού? Καθοδήγησέ με :Ρ

    ReplyDelete