- Μαθήματα PHP – Εισαγωγή (Μέρος 1)
Η Βίβλος της PHP – Μέρος 1 – Εισαγωγή
Πριν από την Εμφάνιση της PHP
Πριν ακόμα την εμφάνιση της PHP, υπήρχε μεγάλη δραστηριότητα στο Web programming. Παλαιότερα, ο κώδικας για να μπορέσουμε να επεξεργασθούμε τα δεδομένα (καταχωρήσεις) μιας φόρμας γραφόταν στη γλώσσα C. Αλλά, ενώ ο κώδικας αυτός ήταν πολύ γρήγορος στην εκτέλεσή του, ήταν πολύ δύσκολος και πολύπλοκος στο γράψιμό του. Ο κύριος λόγος γι’ αυτό ήταν ότι η C δεν είχε σχεδιασθεί ειδικά για το Web και έτσι δεν υπήρχε έτοιμος κώδικας για την εκτέλεση κάποιων κοινών εργασιών και ο προγραμματιστής (Web developer) έπρεπε να τα κάνει όλα μόνος του.
Για παράδειγμα, σε μια HTML φόρμα (form) με δύο πλαίσια κειμένου (text boxes), με ονόματα “FirstName” και “LastName”, όπου ο χρήστης είχε καταχωρήσει τα ονόματα “Νίκος” και “Αντωνιάδης”, το πρόγραμμα της C θα λάμβανε το string “FirstName=Νίκος&LastName=Αντωνιάδης”. Θα έπρεπε μετά να αναλύσει (διασπάσει) το string ώστε να μπορέσει να ξεχωρίσει ποιες είναι οι μεταβλητές και ποιες οι τιμές τους. Αυτό βέβαια ήταν πολύ καλύτερο από την κατάσταση που υπήρχε μέχρι τότε, καθώς το πρωτόκολλο HTTP είναι ένα stateless σύστημα, που σημαίνει ότι δεν αποθηκεύει καθόλου δεδομένα ανάμεσα στις σελίδες και έτσι και αυτό ακόμα το γράψιμο κώδικα σε C για την αποστολή δεδομένων ανάμεσα στις σελίδες ήταν ένα σημαντικό βήμα μπροστά.
Αυτό το πρόβλημα αντιμετωπίστηκε κάπως με μια ευκολότερη γλώσσα υψηλού επιπέδου, την Perl, όπου τα αρχικά προέρχονται από τις λέξεις “Practical Extraction and Report Language”. Η Perl, αν και αρχικά δημιουργήθηκε ως μια γλώσσα επεξεργασίας κειμένου, είχε δυνατότητες για επεξεργασία των καταχωρήσεων μιας HTML φόρμας και όχι μόνο. Η σχεδίαση της Perl ήταν απλή : ένα script της Perl μπορούσε να κάνει όλες τις απαραίτητες λειτουργίες μιας ιστοσελίδας και μπορούσαμε να ενσωματώσουμε σ’ αυτό όποιον κώδικα της HTML θέλαμε. Η Perl διέθετε ακόμη πάρα πολλές συναρτήσεις (functions) για να γίνονται εύκολα πολλές εργασίες και έτσι έγινε σύντομα πολύ δημοφιλής ανάμεσα στους Web developers.
Αν και αποτέλεσε ένα σημαντικό βήμα μπροστά για το Web development, η Perl απείχε ακόμα πολύ από το ιδανικό. Ο τρόπος εργασίας της, δηλ. το ότι «μια γλώσσα μπορεί να τα κάνει όλα» σήμαινε ότι δεν ήταν σχεδιασμένη για το Web και πολλοί προγραμματιστές της Perl προτιμούσαν τον δομημένο, εύκολο στην ανάγνωση προγραμματισμό από τον προγραμματισμό της «μίας γραμμής», όπου υπήρχε συμπυκνωμένος και δύσκολος στην κατανόηση κώδικας. Ίσως το μεγαλύτερο ελάττωμά της ήταν ότι η Perl ήταν Perl-centric, που σημαίνει ότι για να δημιουργηθεί HTML κώδικας, έπρεπε να ενσωματώσουμε τον HTML κώδικα μέσα στην Perl.
Οι Πρώτες Εκδόσεις της PHP
Η αρχική έκδοση της PHP σχεδιάσθηκε και δημιουργήθηκε από τον Rasmus Lerdorf στα μέσα της δεκαετίας του 1990 ως ένας τρόπος για να μπορούν να γίνονται διάφορες κοινές εργασίες στο Web ευκολότερα και με λιγότερες επαναλήψεις. Τότε, ο κύριος σκοπός ήταν να υπάρχει η λιγότερη δυνατή ποσότητα λογικής στην επίτευξη του αποτελέσματος και αυτό οδήγησε την PHP στο να γίνει HTML-centric, δηλ. ο κώδικας της PHPήταν ενσωματωμένος μέσα στον κώδικα της HTML.
Η πρώτη δημοφιλής έκδοση της PHP ονομάσθηκε PHP/FI 2.0, από τα αρχικά Personal Home Page/Form Interpreter. Το κύριο χαρακτηριστικό αυτής της έκδοσης ήταν ότι ο PHP/FI parser ήταν γραμμένος κυρίως με το χέρι και έτσι δημιουργόντουσαν συχνά λάθη. Ο όρος parser (αναλυτής) αναφέρεται στον μηχανισμό ο οποίος δέχεται ένα script και το μετατρέπει σε κάτι που μπορεί να κατανοήσει ο υπολογιστής.
Μερικά από αυτά τα προβλήματα επιλύθηκαν στην έκδοση 3, όταν ο Zeev Suraski και ο Andi Gutmans ξαναέγραψαν την PHP από την αρχή χρησιμοποιώντας καινούργια εργαλεία. Η PHP απέκτησε πολλούς οπαδούς και όταν εμφανίσθηκε η καινούργια έκδοση στα μέσα του 2000, είχε ήδη εγκατασταθεί σε περισσότερα από 2,5 εκατομμύρια Web-site domains, σε σύγκριση με τα 250.000 μόλις 18 μήνες νωρίτερα.
Στα μέσα του έτους 2000, εμφανίσθηκε η έκδοση PHP 4, που είχε μεγάλες διαφορές από την PHP 3. Πολύ δουλειά έγινε στο να διασφαλισθεί η προς τα πίσω συμβατότητα του κώδικα με τα παλιά scripts της PHP και έτσι η αναβάθμιση από την PHP 3 στην PHP 4 ήταν πολύ πιο ομαλή απ’ ό,τι ήταν η αναβάθμιση από την PHP/FI στην PHP 3.
Η σημαντικότερη ίσως αλλαγή που έγινε στην PHP 4 ήταν η καθιέρωση της Μηχανής Zend (Zend Engine), η οποία δημιουργήθηκε από την εταιρεία Zend, των Zeev Suraski και Andi Gutmans. Το όνομα Zend προέρχεται από τις λέξεις ZEev και aNDi και ο σκοπός της μηχανής ήταν να προωθήσει την PHP στο εταιρικό περιβάλλον, ώστε να υπάρχει πολύ περισσότερη ευελιξία στη γλώσσα απ’ ό,τι παλαιότερα.
Μια άλλη σημαντική καινοτομία ήταν ότι η PHP μπορούσε τώρα να εκτελεστεί σε πολλούς Web servers, όπως Apache 1.3.x, Apache 2, Microsoft’s IIS, Zeus, AOLServer κ.ά. Επίσης, η απόδοση της γλώσσας έκανε ένα πολύ μεγάλο άλμα μπροστά εξαιτίας δύο παραγόντων. Πρώτα, ενώ η PHP 3 χρησιμοποιούσε τη λογική “εκτέλεση ενώ γίνεται διερμήνευση”, που σήμαινε ότι η PHP διάβαζε μια γραμμή πηγαίου κώδικα, τον διερμήνευε, τον εκτελούσε, διάβαζε μια άλλη γραμμή κώδικα, τον διερμήνευε, τον εκτελούσε, διάβαζε την επόμενη γραμμή κοκ. Αυτό σήμαινε ότι ο κώδικας διαβαζόταν και διερμηνευόταν πολλές φορές, χωρίς να υπάρχει κανένας απολύτως λόγος.
Η PHP 4 υιοθέτησε τη λογική “μεταγλώττιση πρώτα, εκτέλεση αργότερα”, όπου πρώτα διάβαζε ολόκληρο το script και το μεταγλώττιζε σε ενδιάμεσο κώδικα (byte code) πριν το εκτελέσει. Αυτό είχε ως αποτέλεσμα μεγάλη αύξηση στην ταχύτητα. Ο κώδικας “byte code” αποτελεί μια εσωτερική αναπαράσταση ενός script που η PHP μπορεί να κατανοήσει εύκολα και είναι συνήθως πολύ μεγαλύτερος σε μήκος από το ίδιο το scriptκαθώς η κάθε εντολή της PHP διασπάται (αναλύεται) σε πολλές άλλες πιο απλές εντολές.
Επίσης, η PHP 4 εισήγαγε την πολυεπεξεργασία (multi-threading), όπου μπορούν κάποιες συναρτήσεις να εκτελούνται ανεξάρτητα από το κυρίως script. Η PHP συνεχίζει να προχωράει ατάραχη και η τρέχουσα έκδοσή της είναι η 4.3.9, είναι δε εγκατεστημένη σε 9,5 εκατομμύρια περίπου Web servers σ’ όλον τον κόσμο.
Η Τρέχουσα Έκδοση της PHP
Η PHP 5 ήταν ένα μεγάλο βήμα μπροστά για τη γλώσσα, αν και όχι τόσο μεγάλο όσο η μετάβαση από την PHP 3 στην PHP 4. Η PHP 5 προσφέρει scripts για αντικειμενοστραφή προγραμματισμό (object-oriented). Επίσης, υπάρχει μια μεγάλη ποικιλία από συναρτήσεις για αντικείμενα (objects) που τα κάνει πολύ πιο ευέλικτα και εύκολα στη χρήση τους. Ακόμη, τα αντικείμενα αντιμετωπίζονται πάντα ως αναφορές (references) ώστε να βοηθηθούν οι προγραμματιστές που δυσκολεύονται να εργαστούν με τα αντικείμενα.
Η Αναβάθμιση από την PHP 3
Μια από τις σημαντικότερες αλλαγές που έγιναν στην PHP 4 ήταν ο κώδικας αντικατάστασης μεταβλητών μέσα σε strings. Για παράδειγμα, πολύ συχνά, στην PHP 3, γράφαμε το εξής :
print "Η τιμή του τρίτου στοιχείου είναι " . $myarray[2] . " ευρώ";
Αυτό ήταν κάπως δύσκολο στην ανάγνωση και βελτιώθηκε στην PHP 4. Μπορούμε τώρα να προσθέσουμε τις αγκύλες, { και }, γύρω από ένα στοιχείο ενός πίνακα (array) που βρίσκεται μέσα σ’ ένα string ώστε να αντικατασταθεί με την τιμή του, όπως για παράδειγμα :
print "Η τιμή του τρίτου στοιχείου είναι {$myarray[2]} ευρώ";
Η Αναβάθμιση από την PHP 4
Η δυσκολία που είναι πιθανό να συναντήσετε αν κάνετε αναβάθμιση από την PHP 4 θα εξαρτηθεί από την έκδοση της PHP 4 στην οποία αναβαθμίζεστε, καθώς στην PHP 4.1 έγιναν μεγάλες αλλαγές σχετικά με τη διαθεσιμότητα των μεταβλητών. Η Register_globals, που είναι μια ειδική ρύθμιση στο αρχείο php.ini, όπου η PHP δημιουργούσε αυτόματα μεταβλητές από τις καταχωρήσεις του χρήστη, είναι τώρα ανενεργή εξ ορισμού για λόγους ασφαλείας.
Οι περισσότερες αλλαγές που έγιναν στην PHP 5 έχουν να κάνουν με τον προσανατολισμό σε αντικείμενα (object orientation). Τα αντικείμενα τώρα μεταβιβάζονται και εκχωρούνται με αναφορά (by reference), δηλ. όταν λέμε “$object_a = $object_b” στην PHP 5, είναι το ίδιο με το “$object_a = & $object_b” στην PHP 4.
Η Μηχανή Zend
Αφού έκαναν επανάσταση στην PHP με τη δημιουργία της PHP 3, ο Andi Gutmans και ο Zeev Suraski συνέχισαν με τη σχεδίαση και τη δημιουργία της PHP 4, που αποτέλεσε μια ακόμα επανάσταση για τη γλώσσα καθώς δεν υπάρχει η ανάγκη για διερμήνευση (interpretation) της κάθε γραμμής κώδικα, επειδή ο Andi και ο Zeev έκαναν τη γλώσσα να μπορεί να μεταγλωττίζεται (compiled). Το πέτυχαν αυτό δημιουργώντας μια καινούργια μηχανή για τη γλώσσα, που είναι γνωστή ως η Μηχανή Zend (Zend Engine).
Η Σύνδεση με την HTML
Ο κώδικας της PHP ενσωματώνεται μέσα στον κώδικα της HTML σε ειδικά μπλοκ κώδικα, που περικλείονται συνήθως από τα σύμβολα <?php και ?>, όπως φαίνεται παρακάτω :
<html> <body> <p>Καλώς ήρθες, <?php print $Name; ?></p> </body> </html>
Δεν θα πρέπει να ξεχνάμε ότι ο κώδικας της PHP εκτελείται εξ ολοκλήρου στον server και έτσι ο πελάτης (client) λαμβάνει μόνο το τελικό αποτέλεσμα από την εκτέλεση του script. Αυτό σημαίνει με απλά λόγια ότι οι τελικοί χρήστες δεν μπορούν ποτέ να δουν τον πηγαίο κώδικα (source code) της PHP.
Η Διερμήνευση και η Μεταγλώττιση
Η PHP χρησιμοποιεί μια μίξη από διερμήνευση (interpretation) και μεταγλώττιση (compilation) έτσι ώστε να μπορέσει να δώσει στους προγραμματιστές τον καλύτερο δυνατό συνδυασμό απόδοσης και ευελιξίας. Στο παρασκήνιο, η PHP μεταγλωττίζει το script σε μια σειρά από εντολές (instructions), που είναι γνωστές με τον όρο opcodes, οι οποίες εντολές εκτελούνται μία-μία μέχρι να τελειώσει το script.
Αυτό είναι κάτι διαφορετικό από τις παραδοσιακές γλώσσες που μεταγλωττίζονται, όπως είναι η C++, όπου ο κώδικας μεταγλωττίζεται σε εκτελέσιμο κώδικα μηχανής, ενώ η PHP μεταγλωττίζει εκ νέου το script κάθε φορά που αυτό απαιτείται. Αυτή η συνεχής μεταγλώττιση μπορεί να φαίνεται ως απώλεια χρόνου, αλλά δεν είναι καθόλου κακή καθώς δεν χρειάζεται να κάνουμε συνέχεια εμείς τη μεταγλώττιση των scripts όταν γίνονται κάποιες αλλαγές σ’ αυτά.
Η Εντολή Print
Η PHP προσφέρει μεγάλη ευελιξία ως προς το πώς θέλουμε να εκτυπώσουμε (εμφανίσουμε) τα μηνύματά μας. Σε γενικές γραμμές, η PHP ενσωματώνεται μέσα στον HTML κώδικα σε τμήματα κώδικα που ξεκινούν με το σύμβολο <?php και τελειώνουν με το σύμβολο ?>.
Μπορούμε να το αντιστρέψουμε αυτό αν γράψουμε όλο το script ως έναν μεγάλο PHP κώδικα και εκτυπώσουμε τις εντολές της HTML όπου χρειάζεται. Αν αναφερθούμε στο προηγούμενο παράδειγμα, μπορούμε να κάνουμε τον PHP κώδικα να φαίνεται ολόιδιος με τον κώδικα της Perl, εκτυπώνοντας την HTML μέσα από τον PHP κώδικα, ως εξής :
<?php print "<html>\n"; print "<body>\n"; print "<p>Καλώς ήρθες, $Name</p>\n"; print "</body>\n"; print "</html>\n"; ?>
Η Print είναι μια απλή συνάρτηση (function) ή και εντολή που η δουλειά της είναι να εμφανίζει στην οθόνη του χρήστη ένα κομμάτι κειμένου. Το \n σημαίνει ξεκίνημα καινούργιας γραμμής. Αν δεν είστε σίγουροι για το αν είναι σωστά εγκατεστημένη η PHP στο μηχάνημά σας, ο καλύτερος τρόπος για να το ελέγξετε είναι να εκτελέσετε το παρακάτω script :
<?php phpinfo(); ?>
Το script αυτό καλεί την ειδική συνάρτηση phpinfo(), η οποία εμφανίζει όλες τις πληροφορίες που διαθέτει η PHP, όπως ποια είναι η σύνθεσή της, σε ποιον server εκτελείται, ποια modules είναι διαθέσιμα κ.ά.
Πώς Γράφεται η PHP
Όπως είδαμε και νωρίτερα, ο κώδικας της PHP ενσωματώνεται μέσα στην HTML και τα στοιχεία της PHP που υπάρχουν σ’ ένα script είναι σαν νησίδες κώδικα (code islands), δηλ. αυτόνομα κομμάτια κώδικα που μπορούν να εκτελεστούν ανεξάρτητα από την περιβάλλουσα HTML. Αυτό βέβαια δεν σημαίνει ότι ο κώδικας της PHP δεν μπορεί να επηρεάσει την HTML, κάθε άλλο μάλιστα.
Τα scripts της PHP αποθηκεύονται συνήθως με την επέκταση .php και κάθε φορά που ο Web server πρέπει να στείλει ένα αρχείο που τελειώνει σε .php, πρώτα το στέλνει στον διερμηνευτή (interpreter) της PHP, ο οποίος εκτελεί τον κώδικα της PHP που υπάρχει στο script πριν επιστρέψει το παραγόμενο αρχείο στον τελικό χρήστη. Η κάθε γραμμή του PHP κώδικα είναι γνωστή ως εντολή (statement) και τελειώνει με το σύμβολο ;.
Οι μεταβλητές (variables) της PHP ξεκινούν με το σύμβολο $ ακολουθούμενο από ένα γράμμα ή τον χαρακτήρα _ (underscore) και μετά από έναν συνδυασμό από γράμματα, ψηφία και τον χαρακτήρα _. Αυτό σημαίνει ότι δεν μπορούμε να ξεκινήσουμε το όνομα μιας μεταβλητής με ψηφίο. Ακολουθεί μια λίστα από έγκυρα και μη ονόματα μεταβλητών :
$myvar | Σωστό |
$Name | Σωστό |
$_Age | Σωστό |
$___AGE___ | Σωστό |
$10 | Λάθος – ξεκινά με ψηφίο |
$10Name | Λάθος – ξεκινά με ψηφίο |
$Name10 | Σωστό |
$_Name10 | Σωστό |
$Name’s | Λάθος, όχι σύμβολα εκτός από το _ |
Δεν θα πρέπει να ξεχνάμε ότι στα ονόματα των μεταβλητών ξεχωρίζουν τα πεζά από τα κεφαλαία γράμματα (case sensitive), που σημαίνει ότι η $Florina δεν είναι η ίδια μεταβλητή με την $florina, την $FLORINA ή την $florINA.
Για την εκχώρηση τιμών στις μεταβλητές χρησιμοποιούμε το σύμβολο =, ακολουθούμενο από την τιμή που θέλουμε να δώσουμε στη μεταβλητή. Ακολουθεί ένα απλό script που δείχνει την εκχώρηση τιμών σε μια μεταβλητή και την εμφάνιση της τιμής της μεταβλητής :
<?php $name = "Κώστας"; print "Το όνομά σου είναι $name\n"; $name2 = $name; $age = 40; print "Το όνομά σου είναι $name2 και η ηλικία σου $age\n"; print 'Γεια σου, $name!\n'; ?>
Ορίσαμε να έχει η μεταβλητή $name ως τιμή το string “Κώστας” και η PHP εμφάνισε την τιμή της μεταβλητής μαζί με το κείμενο “Το όνομά σου είναι”. Συνεπώς, η έξοδος της πρώτης εντολής print θα είναι το κείμενο “Το όνομά σου είναι Κώστας”, επειδή η PHP θα αντικαταστήσει το $name με την τιμή του.
Μετά θέτουμε το $name2 να έχει την τιμή του $name και έτσι το $name2 περιέχει επίσης το κείμενο “Κώστας”. Ορίσαμε επίσης η μεταβλητή $age να έχει την ακέραια τιμή 40 και έτσι η δεύτερη εντολή print εμφανίζει τις τιμές και των δύο μεταβλητών. Η τελευταία εντολή print δεν θα κάνει όμως αυτό που περιμένουμε καθώς θα εμφανίσει το εξής μήνυμα :
Γεια σου, $name!
Ο λόγος είναι ότι η PHP δεν αντικαθιστά τις μεταβλητές με τις τιμές τους όταν αυτές βρίσκονται ανάμεσα σε strings με μονά εισαγωγικά. Ενώ σε strings που βρίσκονται ανάμεσα σε διπλά εισαγωγικά, η PHP αντικαθιστά τη μεταβλητή $name με την τιμή της, σ’ ένα string με μονά εισαγωγικά, η PHP δεν ξεχωρίζει το $name ως μεταβλητή. Υπάρχουν περιπτώσεις που μπορεί να μπερδέψουμε το όνομα μιας μεταβλητής με το περιβάλλον κείμενο, όπως εδώ :
<?php $fruit = "πορτοκάλι"; print "Αυτά τα $fruita δεν είναι ώριμα ακόμα."; ?>
Αυτό που θέλουμε να εμφανίσουμε είναι το μήνυμα “Αυτά τα πορτοκάλια δεν είναι ώριμα ακόμα.”, αλλά επειδή προσθέσαμε το a στο τέλος του ονόματος της μεταβλητής $fruit, η μεταβλητή άλλαξε και έγινε $fruita. Η μεταβλητή $fruita δεν υπάρχει, όμως, και έτσι η PHP θα αφήσει ένα κενό διάστημα. Για να δώσουμε μια λύση σ’ αυτό το θέμα, θα πρέπει να ξεκαθαρίσουμε στην PHP πού αρχίζει και πού τελειώνει η μεταβλητή και αυτό μπορεί να γίνει με δύο τρόπους :
print "Αυτά τα {$fruit}α δεν είναι ώριμα ακόμα."; ?>
Και οι δύο παραπάνω περιπτώσεις είναι έγκυρες και δίνουν το αποτέλεσμα που θέλουμε. Τα σύμβολα { και } λένε στην PHP πού τελειώνει το όνομα της μεταβλητής.
Οι Λευκοί Χαρακτήρες (Whitespace)
Τα κενά (spaces), τα tabs και οι αλλαγές γραμμών (new lines) ανάμεσα στις εντολές δεν έχουν καμία απολύτως επίπτωση στον τρόπο που εκτελείται ο κώδικας. Για παράδειγμα, το επόμενο script είναι το ίδιο μ’ αυτό που είδαμε προηγουμένως, αν και φαίνεται πολύ διαφορετικό :
<?php $name = "Κώστας"; print "Το όνομά σου είναι $name\n"; $name2 = $name; $age = 40; print "Το όνομά σου είναι $name2 και η ηλικία σου $age\n"; print 'Γεια σου, $name!\n'; ?>
Είναι πολύ καλό να χρησιμοποιούμε αυτούς τους χαρακτήρες και κυρίως το tab για να ξεχωρίζουμε τον κώδικά μας σε αυτόνομα μπλοκς, έτσι ώστε να γίνεται εύκολα κατανοητός με μια πρώτη ματιά.
Οι Χαρακτήρες Διαφυγής
Οι χαρακτήρες διαφυγής (escape characters), δηλ. ο συνδυασμός του χαρακτήρα \ και ενός γράμματος, χρησιμοποιούνται για να επισημάνουν ότι ο χαρακτήρας που ακολουθεί τον χαρακτήρα \ (backslash) θα πρέπει να έχει ειδική αντιμετώπιση. Για παράδειγμα, αν θελήσουμε να εμφανίσουμε το string “Και μετά είπε, “Είναι εκπληκτικό!”, που ήταν αλήθεια”, θα χρειασθούμε τους χαρακτήρες διαφυγής επειδή έχουμε διπλά εισαγωγικά μέσα σ’ άλλα διπλά εισαγωγικά.
Ακολουθεί μια λίστα με τους χαρακτήρες διαφυγής της PHP :
\” | Εμφανίζει τον χαρακτήρα ως διπλό εισαγωγικό |
\’ | Εμφανίζει τον χαρακτήρα ως μονό εισαγωγικό |
\n | Κάνει αλλαγή γραμμής |
\t | Εκτυπώνει τον χαρακτήρα tab |
\r | Αλλάζει γραμμή (δεν χρησιμοποιείται πολύ συχνά) |
\$ | Εμφανίζει τον χαρακτήρα του δολαρίου |
\\ | Εμφανίζει τον χαρακτήρα \ |
Ακολουθεί ένα παράδειγμα με τη χρήση των χαρακτήρων διαφυγής :
<?php $MyString = "Έτσι γράφουμε τα \"διπλά\" εισαγωγικά"; $MySingleString = 'Και έτσι τα \'μονά\' εισαγωγικά'; $MyNonVariable = "Έχω \$δολάρια στην τσέπη μου"; $MyNewline = "Εδώ έχουμε αλλαγή γραμμής\n"; $MyFile = "c:\\windows\\system32\\myfile.txt"; ?>
Η τελευταία εντολή εκτυπώνει το εξής :
c:\windows\system32\myfile.txt
Οι χαρακτήρες διαφυγής ισχύουν μόνο ανάμεσα σε διπλά εισαγωγικά, δηλ. αν γράψουμε ‘Hello!\n\n\n’, η PHP θα εμφανίσει τους χαρακτήρες \n\n\n και δεν αλλάξει γραμμή τρεις φορές. Οι χαρακτήρες διαφυγής είναι στην ουσία ένας χαρακτήρας αλλά γράφονται σαν δύο γιατί δεν υπάρχει κάτι αντίστοιχο στο πληκτρολόγιο.
Η Σύνταξη Heredoc
Η σύνταξη heredoc είναι μια πολύ καλή εναλλακτική λύση όταν έχουμε να γράψουμε πολύ κείμενο μέσα στην PHP, αλλά χωρίς να χρειάζεται να προσθέτουμε συνέχεια χαρακτήρες διαφυγής. Με απλά λόγια, μπορούμε να ορίσουμε τον δικό μας οριοθέτη (delimiter), όπως για παράδειγμα τα γράμματα “EOT” (end of text), και μπορούμε μετά να γράψουμε όσα διπλά και μονά εισαγωγικά θέλουμε μέσα στο σώμα του κειμένου. Το κείμενο απλά τελειώνει όταν συναντήσει και πάλι τον οριοθέτη EOT.
Θέλει μόνο προσοχή στο πώς θα γράψουμε τον οριοθέτη στην αρχή και στο τέλος του κειμένου. Ο οριοθέτης πρέπει να γραφεί στην πρώτη γραμμή μετά από τους χαρακτήρες <<< αλλά και στην τελευταία γραμμή, όπου πρέπει να είναι μόνος του και να ξεκινάει από την πρώτη στήλη χωρίς κενά γύρω του. Ακολουθεί ένα παράδειγμα :
<?php $mystring = <<<EOT Το κείμενο αυτό της PHP είναι απολύτως ελεύθερο και μπορούμε να γράψουμε "διπλά" και 'μονά εισαγωγικά', ακόμα και μεταβλητές $variables, οι οποίες θα αντικατασταθούν με τις τιμές τους, μπορούμε ακόμα να γράψουμε και τους χαρακτήρες EOT, εφόσον δεν βρίσκονται σε μια γραμμή, όπως εδώ : EOT; ?>
Κάποια πράγματα που πρέπει να γνωρίζουμε σχετικά με τη σύνταξη heredoc είναι τα εξής :
- Ως οριοθέτη (delimiter) μπορούμε να χρησιμοποιήσουμε όποιο κείμενο θέλουμε και το “EOT” είναι απλά ένα παράδειγμα.
- Θα πρέπει να χρησιμοποιήσουμε τους χαρακτήρες <<< πριν από τον οριοθέτη, ώστε να καταλάβει η PHP από πού ξεκινάει η σύνταξη heredoc.
- Για να εμφανίσουμε το σύμβολο $, θα πρέπει να χρησιμοποιήσουμε τον αντίστοιχο χαρακτήρα διαφυγής για να μην μπερδευτεί η PHP και περάσει το κείμενο ως μεταβλητή.
- Μπορούμε να χρησιμοποιήσουμε τον οριοθέτη που επιλέξαμε οπουδήποτε μέσα στο κείμενο, αλλά όχι στην πρώτη στήλη μιας καινούργιας γραμμής.
- Στο τέλος του κειμένου, θα πρέπει να γράψουμε τον οριοθέτη χωρίς κενά γύρω του και ακολουθούμενο από το σύμβολο ; (semi-colon) για να τελειώσει η εντολή.
Τα Tags για τον Κώδικα της PHP
Υπάρχουν πολλοί τρόποι για να ανοίξουμε μια περιοχή (νησίδα) PHP κώδικα μέσα στον HTML κώδικα μιας ιστοσελίδας. Ο πιο συνήθης είναι η χρήση των συμβόλων <?phpγια να μπούμε σε PHP mode και των συμβόλων ?> για να βγούμε από PHP mode, αν και μπορούμε να χρησιμοποιήσουμε και τα πιο σύντομα σύμβολα <? και ?>. Η σύντομη γραφή έχει το πλεονέκτημα ότι μπορούμε να εμφανίσουμε δεδομένα (τιμές) μέσα στο script με το σύμβολο <?=, ως εξής :
<?="Florina per sempre!" ?>
Για να κάνουμε το ίδιο με τα κλασικά tags, θα πρέπει να γράψουμε το εξής με την κλασική εντολή print :
<?php print "Florina per sempre!"; ?>
Όμως, το μεγάλο μειονέκτημα που έχει η σύντομη γραφή είναι ότι έρχεται σε σύγκρουση με την XML, η οποία επίσης χρησιμοποιεί τα σύμβολα <? για να ανοίξει ένα μπλοκ κώδικα. Αυτό σημαίνει ότι αν προσπαθήσουμε να γράψουμε ταυτόχρονα XML και PHP κώδικα με τα σύντομα tags, θα υπάρξουν προβλήματα και αυτός είναι και ο κυριότερος λόγος που οι περισσότεροι προτιμούν την κλασική μορφή των tags.
Υπάρχουν και δύο άλλοι τρόποι γραφής, λιγότερο δημοφιλείς, τα σύμβολα <% και %>, που είναι παρόμοια με τα σύμβολα που χρησιμοποιεί η ASP και τα γνωστά μας από την JavaScript <script language=”php”> </script>;. Δεν χρησιμοποιούνται συνήθως καθώς θα πρέπει προηγουμένως να δηλωθεί η χρήση τους. Μπορούμε να εισέλθουμε σε και να εξέλθουμε από PHP mode με τα σύμβολα <?php και ?> οποτεδήποτε και όσο συχνά θέλουμε.
Ο Σχολιασμός του Κώδικα
Ενώ είμαστε σε PHP mode, μπορούμε να εισάγουμε σχόλια (comments) με τους εξής τρεις τρόπους : //, /* */ και #. Τα σύμβολα // και # σημαίνουν “αγνόησε το υπόλοιπο κομμάτι της γραμμής”, ενώ το /* σημαίνει “αγνόησε ό,τι ακολουθεί μέχρι να συναντήσεις το άλλο σύμβολο */”. Ακολουθεί ένα χαρακτηριστικό παράδειγμα :
<?php print "Αυτό θα εκτυπωθεί\n"; // print "Αυτό δεν θα εκτυπωθεί – είναι σχόλιο\n"; # print "Αυτό δεν θα εκτυπωθεί – είναι σχόλιο\n"; print "Αυτό θα εκτυπωθεί\n"; /* print "Αυτό δεν θα εκτυπωθεί – είναι σχόλιο\n"; print "Αυτό δεν θα εκτυπωθεί – είναι συνέχεια του σχολίου\n"; */ ?>
Το σύμβολο που προτιμούν οι περισσότεροι για τον σχολιασμό του κώδικα είναι το //.
Οι Εντολές υπό Συνθήκη
Η PHP υποστηρίζει την κλασική εντολή if … else και ένα χαρακτηριστικό παράδειγμα είναι το εξής :
<?php $Age = 20; if ($Age < 18) { print "Είσαι νέος ακόμα!\n"; } else { print "Είσαι πάνω από 18\n"; } if ($Age >= 18 && $Age < 50) { print "Είσαι στην ακμή της ζωής σου\n"; } else { print "Δεν είσαι στην ακμή της ζωής σου\n"; } if ($Age >= 50) { print "Θα πάρεις σύντομα σύνταξη!\n"; } else { print "Δεν θα πάρεις σύντομα σύνταξη "; } ?>
Τα σύμβολα && παριστάνουν τον λογικό τελεστή ΚΑΙ (AND), δηλ. θα πρέπει να είναι αληθείς και οι δύο συνθήκες για να είναι αληθές (true) το αποτέλεσμα. Υπάρχει και ο λογικός τελεστής || που παριστάνει τη διάζευξη Ή (OR), δηλ. αρκεί να είναι αληθής (true) μία μόνο από τις δύο συνθήκες για να είναι αληθές το αποτέλεσμα.
Οι βασικοί τελεστές σύγκρισης που χρησιμοποιεί η PHP είναι ο < (μικρότερο από), ο <= (μικρότερο από ή ίσο με), ο > (μεγαλύτερο από), ο >= (μεγαλύτερο από ή ίσο με) και ο == (ίσο με). Βλέπουμε ότι η PHPχρησιμοποιεί εκτεταμένα τα σύμβολα { και } για να μπορεί να ξεχωρίσει το κομμάτι του κώδικα που θέλουμε να εκτελεστεί όταν η εντολή if είναι αληθής (true) από το κομμάτι του κώδικα που θέλουμε να εκτελεστεί στην αντίθετη περίπτωση (else block).
Υπάρχει και η γνωστή εντολή elseif, με την οποία μπορούμε να δημιουργήσουμε μια αλυσιδωτή σειρά από εντολές υπό συνθήκη. Ακολουθεί ένα παράδειγμα :
<?php if ($Age < 10) { print "Είσαι κάτω από 10"; } elseif ($Age < 20) { print "Είσαι κάτω από 20"; } elseif ($Age < 30) { print "Είσαι κάτω από 30"; } elseif ($Age < 40) { print "Είσαι κάτω από 40"; } else { print "Είσαι πάνω από 40"; } ?>
Θα μπορούσαμε να έχουμε το ίδιο αποτέλεσμα και με πολλές διαδοχικές εντολές if.
Η Εντολή Switch
Δείτε τον παρακάτω κώδικα :
<?php $Name = "Γιάννης"; if ($Name == "Δημήτρης") { print "Το όνομά σου είναι Δημήτρης\n"; } else { if ($Name == "Λίνα") { print "Το όνομά σου είναι Λίνα\n"; } else { if ($Name == "Γιάννης") { print "Το όνομά σου είναι Γιάννης\n"; } else { if ($Name == "Μαρία") { print "Το όνομά σου είναι Μαρία\n"; } else { print "Δεν ξέρω το όνομά σου!\n"; } } } } ?>
Εδώ προσπαθούμε να βρούμε ποιο κομμάτι του κώδικα θα εκτελεστεί, αλλά αυτό απαιτεί πολύ δουλειά λόγω του τρόπου που συντάσσεται η εντολή if. Η PHP προσφέρει ως εναλλακτική λύση την εντολή switch/case. Σ’ ένα μπλοκ εντολών switch/case προσδιορίζουμε αρχικά την έκφραση που θέλουμε να ελέγξουμε και μετά δίνουμε μια λίστα από τις τιμές που θέλουμε να χειριστούμε. Με τις εντολές switch/case, μπορούμε να ξαναγράψουμε τον προηγούμενο κώδικα με τις πολύπλοκες εντολές if, ως εξής :
<?php $Name = 'Γιάννης'; switch($Name) { case "Δημήτρης": print "Το όνομά σου είναι Δημήτρης\n"; break; case "Linda": print "Το όνομά σου είναι Λίνα\n"; break; case "Bob": print "Το όνομά σου είναι Γιάννης\n"; break; case "Sally": print "Το όνομά σου είναι Μαρία\n"; break; default: print "Δεν ξέρω το όνομά σου!\n"; } ?>
Παρατηρούμε ότι η κάθε case τελειώνει με μια εντολή break και αυτό συμβαίνει γιατί μόλις η PHP βρει ένα ταίριασμα σε μια εντολή case, θα εκτελέσει την αντίστοιχη ενέργεια αλλά και τις ενέργειες όλων των εντολών case που ακολουθούν.
Οι Βρόχοι (Loops)
Υπάρχουν τέσσερις τρόποι για να δημιουργήσουμε βρόχους στην PHP. Το πρώτο είδος βρόχου είναι ο βρόχος while και μπορούμε να τον φανταστούμε σαν μια εντολή if που ελέγχεται συνέχεια μέχρι να γίνει ψευδής (false). Η σύνταξή του είναι ως εξής :
while (συνθήκη) { … κώδικας … }
Όπως και στις εντολές if, μπορούμε να τοποθετήσουμε όποια συνθήκη θέλουμε στον βρόχο αλλά η μεταβλητή που ελέγχεται από τη συνθήκη θα πρέπει σε κάποια στιγμή να αλλάξει τιμή για να μην πέσουμε σε ατέρμονα βρόχο, όπως εδώ :
<?php while (1 == 1) { // κώδικας } ?>
Το 1 θα είναι πάντα ίσο με το 1, που σημαίνει ότι ο παραπάνω βρόχος while δεν θα σταματήσει ποτέ. Αυτό είναι γνωστό με τον όρο ατέρμονας βρόχος (infinite loop), δηλ. ένας βρόχος που δεν θα σταματήσει ποτέ καθώς η συνθήκη του θα είναι πάντα αληθής.
Ατέρμονα βρόχο μπορούμε να έχουμε και με την εξής εντολή :
<?php while(1) { print "Ατελείωτος βρόχος!\n"; } ?>
Ο βρόχος while χρησιμοποιείται συνήθως στις περιπτώσεις εκείνες που δεν μπορούμε να γνωρίζουμε εκ των προτέρων το πλήθος των επαναλήψεων του βρόχου, όπως όταν θέλουμε να διασχίσουμε τις εγγραφές (records) ενός αρχείου :
<?php while (όσο υπάρχουν γραμμές στη βάση δεδομένων) { διάβασμα της γραμμής; μετακίνηση στην επόμενη γραμμή; } ?>
Μια άλλη πολύ δημοφιλής μορφή βρόχου είναι ο βρόχος for, ο οποίος αποτελείται από τρία μέρη, την αρχική δήλωση, τη συνθήκη και την ενέργεια καθώς και από έναν μετρητή που καταγράφει το πόσες φορές έχει εκτελεστεί ο κώδικας του βρόχου, δηλ. στην ουσία μετράει τον αριθμό των επαναλήψεων του βρόχου.
Η αρχική δήλωση είναι εκεί όπου δηλώνεται η μεταβλητή του μετρητή του βρόχου και παίρνει και μια αρχική τιμή, η συνθήκη είναι εκεί όπου ελέγχεται η τιμή του μετρητή για να αποφασισθεί αν θα συνεχισθεί ο βρόχος και η ενέργεια είναι ένα σύνολο εντολών που εκτελούνται στο τέλος της κάθε επανάληψης.
Ακολουθεί ένα χαρακτηριστικό παράδειγμα με τον βρόχο for :
<?php for ($i = 1; $i < 10; $i = $i + 1) { print "Αριθμός $i\n"; } ?>
Όπως μπορούμε να δούμε, ο βρόχος for περιέχει τρία ξεχωριστά τμήματα που διαχωρίζονται με τον χαρακτήρα ;. Στην αρχική δήλωση, που είναι το πρώτο τμήμα, δώσαμε στη μεταβλητή $i την τιμή 1. Η συνθήκη, που είναι το δεύτερο τμήμα, ελέγχει αν η τιμή της μεταβλητής $i είναι μικρότερη από 10 για να συνεχίσει η εκτέλεση του βρόχου. Τέλος, στο τρίτο τμήμα, προσθέτουμε το 1 στην τιμή της μεταβλητής $i σε κάθε επανάληψη του βρόχου.
Το αποτέλεσμα από την εκτέλεση του παραπάνω script θα είναι να εμφανισθούν οι αριθμοί από το 1 έως το 9, ως εξής :
Αριθμός 1
Αριθμός 2
Αριθμός 3
Αριθμός 4
Αριθμός 5
Αριθμός 6
Αριθμός 7
Αριθμός 8
Αριθμός 9
Ατέρμονα βρόχο μπορούμε να έχουμε με την εξής εντολή for :
<?php for (;;) { print "Ατελείωτος βρόχος!\n"; } ?>
Το τρίτο είδος βρόχου είναι ο βρόχος do … while, που είναι παρόμοιος με τον βρόχο while με τη διαφορά ότι αυτός εκτελείται τουλάχιστον μία φορά. Ας δούμε το παρακάτω κομμάτι κώδικα :
<?php for (;;) { print "Ατελείωτος βρόχος!\n"; } ?>
Εδώ, η συνάρτηση myfunction() δεν θα κληθεί ποτέ, επειδή η μεταβλητή $a δεν θα είναι μικρότερη από το 10. Όμως, σ’ έναν βρόχο do … while, έχουμε το εξής :
<?php for (;;) { print "Ατελείωτος βρόχος!\n"; } ?>
Εδώ, η συνάρτηση myfunction() θα εκτελεστεί μία φορά πριν από τον έλεγχο της τιμής της μεταβλητής $a και αν η $a είναι μικρότερη από το 10, ο βρόχος θα εκτελεστεί ξανά. Βλέπουμε ότι η μόνη διαφορά ανάμεσα στους βρόχους while και do … while είναι ότι ο τελευταίος εκτελείται πάντα μία τουλάχιστον φορά.
Το τελευταίο είδος βρόχου είναι ο βρόχος foreach, ο οποίος χρησιμοποιείται για να διασχίσουμε έναν πίνακα (array) από δεδομένα και θα τον δούμε αργότερα.
Οι Εντολές break και continue
Υπάρχουν δύο πολύ χρήσιμες εντολές που μπορούμε να χρησιμοποιήσουμε με τους βρόχους, η break και η continue. Είδαμε ήδη την εντολή break νωρίτερα στην εντολή switch, όπου χρησιμοποιείται για να μπορούμε να βγούμε από ένα μπλοκ εντολών switch/case, και έχει το ίδιο αποτέλεσμα και στους βρόχους.
Όταν χρησιμοποιείται μέσα σε βρόχους, η εντολή break αναγκάζει την PHP να βγει από τον βρόχο και να συνεχίσει με την αμέσως επόμενη εντολή εκτός του βρόχου, ενώ η εντολή continue αναγκάζει την PHP να αφήσει το υπόλοιπο μέρος του βρόχου και να συνεχίσει με την επόμενη επανάληψη του βρόχου.
Ακολουθεί ένα παράδειγμα :
<?php for (;;) { print "Ατελείωτος βρόχος!\n"; } ?>
Το αποτέλεσμα από την εκτέλεση του παραπάνω script θα είναι το εξής :
Αριθμός 1
Αριθμός 2
Αριθμός 4
Αριθμός 5
Αριθμός 6
Βλέπουμε ότι δεν εκτυπώθηκε ο αριθμός 3 και ότι το script τελειώνει μετά από τον αριθμό 6. Αυτό συνέβη γιατί όταν η μεταβλητή του βρόχου είχε την τιμή 3, εκτελέστηκε η εντολή continue και η εκτέλεση του scriptπήγε στην αρχή του βρόχου με την επόμενη τιμή 4, ενώ όταν η μεταβλητή του βρόχου είχε την τιμή 7, εκτελέστηκε η εντολή break και η εκτέλεση του script τελείωσε.
Βρόχοι Μέσα σε Βρόχους
Μπορούμε να έχουμε έναν βρόχο τοποθετημένο μέσα στο σώμα ενός άλλου βρόχου, ως εξής :
for ($i = 1; $i < 3; $i = $i + 1) { for ($j = 1; $j < 4; $j = $j + 1) { for ($k = 1; $k < 3; $k = $k + 1) { print "I: $i, J: $j, K: $k\n"; } } }
Το αποτέλεσμα από την εκτέλεση του παραπάνω script θα είναι το εξής :
I: 1, J: 1, K: 1
I: 1, J: 1, K: 2
I: 1, J: 2, K: 1
I: 1, J: 2, K: 2
I: 1, J: 3, K: 1
I: 1, J: 3, K: 2
I: 2, J: 1, K: 1
I: 2, J: 1, K: 2
I: 2, J: 2, K: 1
I: 2, J: 2, K: 2
I: 2, J: 3, K: 1
I: 2, J: 3, K: 2
Αν χρησιμοποιήσουμε την εντολή break, θα βγούμε από τον πιο εσωτερικό βρόχο, ως εξής :
for ($i = 1; $i < 3; $i = $i + 1) { for ($j = 1; $j < 4; $j = $j + 1) { for ($k = 1; $k < 3; $k = $k + 1) { print "I: $i, J: $j, K: $k\n"; break; } } }
Αυτή τη φορά το script θα εκτυπώσει το εξής :
I: 1, J: 1, K: 1
I: 1, J: 2, K: 1
I: 1, J: 3, K: 1
I: 2, J: 1, K: 1
I: 2, J: 2, K: 1
I: 2, J: 3, K: 1
Όπως μπορούμε να δούμε, ο βρόχος που περιέχει τη μεταβλητή $k κάνει μία μόνο επανάληψη εξαιτίας της εντολής break. Οι άλλοι βρόχοι εκτελούνται κανονικά. Μπορούμε να προσδιορίσουμε και έναν αριθμό μετά από την εντολή break, όπως break 2 ώστε να βγούμε από δύο βρόχους, όπως στο επόμενο παράδειγμα :
for ($i = 1; $i < 3; $i = $i + 1) { for ($j = 1; $j < 4; $j = $j + 1) { for ($k = 1; $k < 3; $k = $k + 1) { print "I: $i, J: $j, K: $k\n"; break 2; } } }
Αυτή τη φορά το script θα εκτυπώσει το εξής :
I: 1, J: 1, K: 1
I: 2, J: 1, K: 1
Αυτή τη φορά το script εκτελείται δύο φορές, επειδή ο βρόχος που περιέχει τη μεταβλητή $k καλεί την εντολή break 2, η οποία στέλνει τον έλεγχο έξω από τους βρόχους $k και $j, οπότε εκτελείται μόνο ο βρόχος $i. Μπορεί να υπάρχει και η εντολή break 3, οπότε ο έλεγχος θα βγει και από τους τρεις βρόχους. Δεν θα πρέπει να ξεχνάμε ότι η εντολή break δουλεύει με τις εντολές βρόχου αλλά και με τις εντολές switch/case, όπως στο επόμενο παράδειγμα :
for ($i = 1; $i < 3; $i = $i + 1) { for ($j = 1; $j < 4; $j = $j + 1) { for ($k = 1; $k < 3; $k = $k + 1) { switch($k) { case 1: print "I: $i, J: $j, K: $k\n"; break 2; case 2: print "I: $i, J: $j, K: $k\n"; break 3; } } } }
Η εντολή break 2 θα βγει έξω από το μπλοκ της switch/case και από τον βρόχο της $k, ενώ η εντολή break 3 θα βγει έξω απ’ αυτά τα δύο αλλά και από τον βρόχο $j. Τέλος, με την εντολή break 4, μπορούμε να βγούμε απ’ όλες τις εντολές.
Γράψιμο Ανάμικτου Κώδικα
Κάτι πολύ βασικό στην PHP είναι ότι μπορούμε να εναλλασσόμαστε από τον κώδικα της PHP σε κώδικα της HTML όποτε θέλουμε και όσο συχνά θέλουμε, ακόμα και μέσα στον κώδικα κάποιας εντολής της PHP. Ακολουθεί ένα βασικό script της PHP :
for ($i = 1; $i < 3; $i = $i + 1) { for ($j = 1; $j < 4; $j = $j + 1) { for ($k = 1; $k < 3; $k = $k + 1) { switch($k) { case 1: print "I: $i, J: $j, K: $k\n"; break 2; case 2: print "I: $i, J: $j, K: $k\n"; break 3; } } } }
Όπως μπορούμε να δούμε, οι εντολές print θα εκτελεστούν μόνο αν η τιμή της μεταβλητής $a είναι ίση με την τιμή της μεταβλητής $b. Έχουμε, όμως, τη δυνατότητα να βγούμε από τον κώδικα της PHP και να εξακολουθεί να ισχύει η εντολή if, ως εξής :
for ($i = 1; $i < 3; $i = $i + 1) { for ($j = 1; $j < 4; $j = $j + 1) { for ($k = 1; $k < 3; $k = $k + 1) { switch($k) { case 1: print "I: $i, J: $j, K: $k\n"; break 2; case 2: print "I: $i, J: $j, K: $k\n"; break 3; } } } }
Οι γραμμές με το κείμενο “Διάφορα” μπορούν να περιέχουν κώδικα της HTML και θα εμφανισθούν μόνο αν οι δύο μεταβλητές $a και $b έχουν ίδιες τιμές, αλλά βγήκαμε από τον κώδικα της PHP για να εμφανισθούν οι εντολές αυτές και μετά ξαναμπήκαμε σε PHP mode για να κλείσουμε την εντολή if. Αυτός ο τρόπος γραφής είναι απλά πιο κατανοητός.
Συμπερίληψη Άλλων Αρχείων
Στην PHP έχουμε τη δυνατότητα να συμπεριλάβουμε τον κώδικα ενός script σ’ ένα άλλο με τη λέξη κλειδί include και το όνομα του αρχείου που θέλουμε να συμπεριλάβουμε. Για παράδειγμα, ας δούμε το παρακάτω αρχείο foo.php :
<?php print "Starting foo\n"; include 'bar.php'; print "Finishing foo\n"; ?> Και το αρχείο bar.php : <?php print "In bar\n"; ?>
Η PHP θα φορτώσει το αρχείο bar.php, θα διαβάσει τα περιεχόμενά του και θα τα τοποθετήσει μέσα στο αρχείο foo.php στο σημείο που γράψαμε την εντολή include ‘bar.php’. Το αρχείο foo.php θα έχει συνεπώς την εξής μορφή :
<?php print "Starting foo\n"; print "In bar\n"; print "Finishing foo\n"; ?>
Βλέπουμε ότι η PHP δεν συμπεριλαμβάνει και τα tags ανοίγματος και κλεισίματος <?php και ?> και αυτό γιατί κάθε φορά που η PHP συμπεριλαμβάνει ένα άλλο αρχείο, βγαίνει από PHP mode και μετά ξαναμπαίνει σε PHP mode μόλις ολοκληρωθεί η συμπερίληψη του αρχείου. Συνεπώς, το αρχείο foo.php, αφού αναμειχθεί με το αρχείο bar.php, θα φαίνεται ως εξής :
<?php print "Starting foo\n"; ?> <?php print "In bar\n"; ?> <?php print "Finishing foo\n"; ?>
Ο παραπάνω κώδικας έχει το ίδιο αποτέλεσμα με τον προηγούμενο, απλά μας μπερδεύει λίγο παραπάνω.
Θα πρέπει να έχουμε υπόψη μας ότι η PHP κάνει συμπερίληψη του αρχείου μόνο αν εκτελεστεί η εντολή include. Έτσι, ο παρακάτω κώδικας δεν θα συμπεριλάβει ποτέ το αρχείο bar.php :
<?php if (10 > 100) { include 'bar.php'; } ?>
Αν το αρχείο που θέλουμε να συμπεριλάβουμε με την εντολή include δεν υπάρχει, η PHP θα εμφανίσει ένα μήνυμα προειδοποίησης (warning message), ενώ υπάρχει και η εντολή require, όπου αν προσπαθήσουμε να συμπεριλάβουμε ένα αρχείο που δεν υπάρχει, η PHP θα σταματήσει την εκτέλεση του script μ’ ένα μοιραίο λάθος (fatal error).
Θα πρέπει να έχουμε υπόψη μας ότι σε παλαιότερες εκδόσεις της PHP, η εντολή require έκανε πάντα συμπερίληψη του αρχείου (εξ ου και το όνομά της) ακόμα και αν ήταν ψευδής (false) η εντολή if που την περιείχε. Αυτό δεν ισχύει πια στην PHP 5. Μπορούμε να χρησιμοποιήσουμε την εντολή include αν, για παράδειγμα, το site μας περιέχει πάντα την ίδια κεφαλίδα (header) σε HTML, οπότε ο κώδικας της κάθε ιστοσελίδας μας μπορεί να ξεκινάει ως εξής :
<?php include 'header.php'; … κώδικας …
Αν η PHP δεν μπορέσει να εντοπίσει το αρχείο που προσπαθούμε να συμπεριλάβουμε με μια από τις εντολές include ή require στον ίδιο φάκελο μ’ αυτόν που εκτελείται το script, θα ψάξει και στο include path, το οποίο ορίζεται στο αρχείο php.ini ως το include_path directive.
Πηγή:
Αν βρήκατε το άρθρο μας χρήσιμο, θέλετε να μείνετε ενημερωμένοι για όλα τα νέα στο τομέα της τεχνολογίας καθώς και σε χρηστικά άρθρα, βοηθήστε μας κάνοντας like στην σελίδα μας στο Facebook πατώντας εδώ