Οι μεταβλητές είναι ένας δεσμευμένος χώρος μνήμης RAM στον server όπου είναι εγκατεστημένη η php και τρέχει εκείνη την στιγμή το script μας. Μέσα σε αυτόν τον χώρο μνήμης αποδίδονται διάφορα είδη τιμών. Για να μπορέσουμε να σας εξηγήσουμε τι ακριβώς είναι οι μεταβλητές θα πρέπει να πάρουμε ένα παράδειγμα από την καθημερινή μας ζωή.
Καθημερινά στο σπίτι μας, χρησιμοποιούμε ένα σωρό από διαφορετικά «δοχεία» για να μπορέσουμε να αντεπεξέλθουμε στις διάφορες ανάγκες μας. Για παράδειγμα στην κουζίνα, το ποτήρι, το φλιτζάνι, η κανάτα, τα tapware, οι κατσαρόλες κ. α. εξυπηρετούν κάποια συγκεκριμένη χρήση. Φιλοξενούν μέσα σε αυτά κάποιο υλικό, είτε υγρό, είτε στερεό, είτε οτιδήποτε για προσωρινό διάστημα.
Στην ουσία οι μεταβλητές χρησιμοποιούνται σε κάθε γλώσσα για να δεσμεύσουν κομμάτια μνήμης στα οποία αποθηκεύονται προσωρινά αριθμοί, χαρακτήρες, κείμενα κ.α. Τα περιεχόμενα των μεταβλητών αυτών μπορούν να είναι οποιοδήποτε είδος τύπου δεδομένων. Βασικός κανόνας στην php είναι ότι τα ονόματα των μεταβλητών ξεκινούν με τον χαρακτήρα «$» (δολάριο). Έτσι αναγνωρίζει τις μεταβλητές ανάμεσα σε άλλα κείμενα.
Στο παρακάτω παράδειγμα, καταχωρείται στη μεταβλητή «$vartest» το (αλφαριθμητικό) κείμενο «Καλωσήρθατε».
<?php
$vartest = "Καλωσήρθατε";
echo $vartest;
?>
Κανόνες ονομασία μεταβλητών
Στην php υπάρχουν κάποιοι συγκεκριμένοι κανόνες με τους οποίους ονομάζουμε τις μεταβλητές μας, έτσι ώστε κατά την διάρκεια της εκτέλεσης η php να μην μπερδεύει το υπόλοιπο κείμενο με τις μεταβλητές που έχουμε.
- Τα ονόματα μεταβλητών θα πρέπει να ξεκινούν με τον χαρακτήρα «$» (δολάριο),
- Μετά το χαρακτήρα δολάριο το όνομα μεταβλητής μπορεί να ξεκινάει από γράμμα ή τον χαρακτήρα της κάτω παύλας «_»,
- Μια μεταβλητή στο σύνολο της ονομασίας της μπορεί να περιλαμβάνει αλφαριθμητικούς λατινικούς χαρακτήρες και κάτω παύλες (a-z,A-Z,0-9, και _),
- Μέσα στα ονόματα δεν επιτρέπεται η χρήση κενών χαρακτήρων « ». Αντιθέτως γι αυτόν τον σκοπό υπάρχει η κάτω παύλα, έτσι αν θέλουμε την μεταβλητή «var test» να την χρησιμοποιήσουμε στην php θα την γράφαμε κάπως έτσι: «$var_test» ή έτσι «$vartest».
- Η γλώσσα php είναι case sensitive και αυτό σημαίνει πως μια μεταβλητή με ίδιο όνομα αλλά με διαφορετικό τρόπο γραφής θεωρείται διαφορετική, πχ το «$vartest» και το «$VARTEST» ή το «$Vartest» είναι τελείως διαφορετικές μεταβλητές.
Οι μεταβλητές στην php δεν υπόκεινται σε μεταγλώττιση, επομένως μπορούμε να δημιουργήσουμε μια μεταβλητή δίνοντάς της αρχικά κάποιο περιεχόμενο βασιζόμενοι σε έναν από τους τύπους δεδομένων, αλλά στην συνέχεια να αλλάξουμε αυτό το περιεχόμενο σε κάποιο άλλο είδος τύπου δεδομένων. Για παράδειγμα θα μπορούσαμε στην αρχή να είχαμε μια μεταβλητή με περιεχόμενο έναν ακέραιο αριθμό, και στην συνέχεια να αλλάξουμε το περιεχόμενο της μεταβλητής αυτής σε ένα αλφαριθμητικό.
<?php
$ilikia = 35; //Δημιουργία ακέραιου 35
$ilikia = "Κώστας"; //Αλλαγή σε αλφαριθμητικό
$ilikia = false; //Αλλαγή σε boolean
?>
Μεταβλητές στις οποίες δεν έχει αποδοθεί κάποιο είδος τιμής, τότε ως αρχικοποιημένη τιμή διαθέτουν την τιμή «NULL». Ωστόσο είναι λάθος να χρησιμοποιούμε μεταβλητές που δεν τους έχουμε ορίσει τιμή. Το σωστότερο είναι να δημιουργούμε την μεταβλητή και αν δεν την χρειαζόμαστε προς το παρόν να την αρχικοποιούμε στην τιμή «null», χειροκίνητα. Για να ελέγξουμε αν μια μεταβλητή είναι «null» ακολουθούμε την παρακάτω διαδικασία:
<?php
$var=null;
if($var === null){
echo "true";
}
?>
Αν θέλουμε να ελέγξουμε αν μια μεταβλητή υπάρχει τότε χρησιμοποιούμε την εντολή «isset()» όπου προσθέτουμε μέσα στις παρενθέσεις την μεταβλητή που θέλουμε να ελέγξουμε, η εντολή αυτή επιστρέφει αντίστοιχα μια τιμή true ή false ανάλογα αν υπάρχει η μεταβλητή ή όχι.
<?php
if(isset($metavar)){
echo "true";
}
?>
Αν θέλουμε να αποδεσμεύσουμε μια θέση μνήμης διαγράφοντας μια μεταβλητή από αυτήν, τότε χρησιμοποιούμε την εντολή «unset()» όπου μέσα στις παρενθέσεις της εισάγουμε ως όρισμα την μεταβλητή που θέλουμε να αφαιρέσουμε.
<?php
$metavar = "Κώστας";
unset($metavar);
echo $metavar;
?>
Αναφορές μεταβλητών
Στην php είναι δυνατό να δημιουργήσουμε μια αναφορά προς μια μεταβλητή έτσι ώστε μια θέση μνήμης να διαθέτει δυο διαφορετικά ονόματα που οδηγούν σε αυτήν. Για να γίνει η μεταβλητή «$nixta» αναφορά της θέσης μνήμης της μεταβλητής «$imera» θα πρέπει να συνταχθεί:
<?php
$imera = "Ήλιο";
$nixta = & $imera;
echo "Η \$nixta έχει $nixta \n";
?>
Αναθέτουμε δηλαδή την μεταβλητή «$imera» στην «$nixta» μόνο που πριν την ανάθεση χρησιμοποιούμε τον χαρακτήρα «&». Αυτό σημαίνει ότι η «$nixta» θα γίνει αναφορά της «$imera». Όπως βλέπουμε στο αποτέλεσμα χρησιμοποιούμε την αναφορά «$nixta» για να τυπώσουμε το περιεχόμενο της, παρ’ όλα αυτά τυπώνεται το περιεχόμενο της μεταβλητής «$imera». Αυτό γίνεται γιατί πλέον η μεταβλητή «$nixta» είναι αναφορά της «$imera», έτσι αν αλλάξουμε την τιμή της «$nixta» αυτόματα θα αλλάξει και η τιμή της «$imera». Η πιο ακριβής απόδωση της παραπάνω περιγραφής ειναι οτι πλέον και οι δυο «αναφορές» δείχνουν προς το συγκεκριμένο σημείο στην μνήμη RAM.
<?php
$imera = "Ήλιο";
$nixta = & $imera;
$nixta = "Ήλιο με σύννεφα";
echo "\$nixta έχει $nixta";
?>
Το ίδιο ισχύει και αντίστροφα, αν αλλάξει η τιμή της «$imera» τότε όταν χρησιμοποιηθεί η αναφορά «$nixta» θα είναι σαν να χρησιμοποιούμε την μεταβλητή «$imera» στην θέση της.
<?php
$imera = "Ήλιο";
$nixta = & $imera;
$imera = "Σύννεφα με βροχή";
echo "\$nixta έχει $nixta";
?>
Αν διαγράψουμε μια αναφορά προς μια μεταβλητή αυτό δεν επηρεάζει την αρχική μεταβλητή ούτε την τιμή της στην μνήμη.
<?php
$imera = "Ήλιο";
$nixta = & $imera;
unset($nixta);
echo "\$imera έχει $imera";
?>