Εισαγωγή στο PHP Σταύρος Πολυβίου Τί είναι το PHP PHP Hypertext Preprocessor ηµιουργήθηκε από τη Zend Technologies Open source Τεχνολογία Server-side Scripting Γιατησυγγραφήπρογραµµάτων που τρέχουν στον εξυπηρετητή Παρόµοιο µε JSP και ASP 1
Πως δουλεύει Εγκαθίσταται ως module πάνω σε ένα εξυπηρετητή διαδικτύου (web server), π.χ. Apache ιαχειρίζεται όλα τα αρχεία µε επέκταση.php Κανονικά HTML αρχεία µε ενσωµατωµένα κοµµάτια κώδικα PHP σε συγκεκριµένα σηµεία Ο κώδικας σε PHP παράγει καινούργια κοµµάτια HTML στα σηµεία που εµφανίζεται Ο φυλλοµετρητής του χρήστη λαµβάνει ένα καθαρό HTML αρχείο χωρίς κώδικα PHP Αρχιτεκτονική τριών επιπέδων (three-tier architecture) SQL HTTP request Αποτελέσµατα (πίνακες) PHP HTML Σύστηµα διαχείρισης δεδοµένων (Database Management System) Εξυπηρετητής διαδικτύου + PHP (Web Server + PHP) Φυλλοµετρητής (Web Browser) 2
Παράδειγµα <html> <body> <?php echo Hello world ;?> </body> </html> <html> <body> Hello world </body> </html> Αρχείο PHP Παραγόµενο αρχείο HTML Hello world Αποτέλεσµα στο φυλλοµετρητή Μεταβλητές και σχόλια Τα ονόµατα των µεταβλητών προηγούνται πάντοτε µε το σύµβολο $ Αυτό µας επιτρέπει να τις ενσωµατώνουµε εύκολασε συµβολοσειρές (strings) Αυτό γίνεται µόνο όταν χρησιµοποιούµε διπλά εισαγωγικά (... ) <html> <body> <?php // Αυτό είναι ένα σχόλιο $name = Stavros Polyviou ; echo Hello $name ; /* Αυτό είναι ένα σχόλιο που καταλαµβάνει πολλές γραµµές */?> </body> </html> 3
Μετα-µεταβλητές (variable variables) Το όνοµα µίας µεταβλητής µπορεί να καθοριστεί µέσω µίας άλλης µεταβλητής $a = One ; $b = Two ; $selected = a ; $$selected = Alpha ; // $a = Alpha ; Προς αποφυγή λαθών, µπορείτε να χρησιµοποιήσετε... για µάζεµα echo $$selected ; // echo $a ; Αναφορές (references) Στο PHP µεταφέρονται οι τιµές και όχι οι διευθύνσεις στη µνήµη τωνεπιχειρηµάτων µίας ρουτίνας (pass by value) Ηδηµιουργία µίας αναφοράς µας επιτρέπει να αναφερθούµε σεµία διεύθυνση στη µνήµη µε περισσότερο από ένα ονόµατα Συνεπώς µας επιτρέπει να τροποποιήσουµε τα επιχειρήµατα µίας ρουτίνας (pass by reference) 4
Παράδειγµα ρουτίνα που τροποποιεί το επιχείρηµά της function foo(&$var) $var++; $a=5; foo($a); // $a = 6; Καθολικές µεταβλητές (global variables) σε ρουτίνες Η εµβέλεια των καθολικών µεταβλητών δεν επεκτέινεται µέσα στα όρια του ορισµού µίας ρουτίνας Θα πρέπει να δηλώσουµε ρητά µέσα στη ρουτίνα σε ποιές καθολικές µεταβλητές θα αναφερθεί, αλλιώς θα δηµιουργηθούν νέες τοπικές µεταβλητές µε το ίδιο όνοµα function foo(&$var) global $increment; $var += $increment; $increment = 2; $a=5; foo($a); // $a = 7; 5
Πίνακες (arrays) Αντίθετα µε άλλες γλώσσες, οι πίνακες του PHP συµπεριφέρονται σαν δυναµικές λίστες (βλ. την κλάση Vector στην Java) Μπορούν να ταξινοµηθούν, να συγκεραστούν, να επεκταθούν ή να συρρικνωθούν κτλ Μπορούν να αποθηκεύσουν ανόµοια στοιχεία Πίνακες - δηµιουργία ηµιουργούνται συνήθως µε την εντολή array() array([κλειδί =>] Τιµή,...) Το κλειδί ταυτοποιεί το κάθε στοιχείο Μπορεί να είναι ακέραιος αριθµός ή συµβολοσειρά 6
ηµιουργία πίνακα - παράδειγµα $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // 1 Το πρώτο κλειδί είναι συµβολοσειρά Το δεύτερο κλειδί είναι αριθµός Η πρώτη τιµή είναισυµβολοσειρά Η δεύτερη τιµή είναιτιµή λογικήςπουερµηνεύεται ως αριθµός (true = 1, false = 0) ηµιουργία πίνακα παράλειψη κλειδιού Αν το κλειδί κάποιου στοιχείου δεν καθοριστεί κατά τη δηµιουργία του πίνακα τότε Αν δεν υπάρχει κανένα στοιχείο στον πίνακα µε κλειδί κάποιο θετικό ακέραιο αριθµό ήτο0 τότε το κλειδί του νέου στοιχείου είναι 0 Αν υπάρχει έστω και ένα στοιχείο µε κλειδί κάποιο θετικό ακέραιο αριθµό ήτο0 τότε το κλειδί του νέου στοιχείου είναι ο µεγαλύτερος θετικός ακέραιος που χρησιµοποιείται ως κλειδί + 1 Αν υπάρχει ήδη κάποιο στοιχείο µε αυτό το κλειδί τότε επεγγράφεται από το νέο στοιχείο 7
Παράλειψη κλειδιού - παράδειγµα Η εντολή $arr = array(5 => 43, 32, 56, "b" => 12); ισοδυναµεί µε $arr = array(5 => 43, 6 => 32, 7 => 56, "b" => 12); Προσθήκη/διαγραφή/τροποποίηση στοιχείου $arr = array(5 => 1, 12 => 2); // Προσθήκη νέου στοιχείου µε κλειδί τον αριθµό 13 $arr[] = 56; // Προσθήκη νέου στοιχείου µε κλειδί τη συµβολοσειρά «x» $arr["x"] = 42; // ιαγραφή του στοιχείου µε κλειδί τον αριθµό 5 unset($arr[5]); // ιαγραφή ολόκληρου του πίνακα unset($arr); 8
ηµιουργία πολυδιάστατων πινάκων $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42) ); echo $arr["somearray"][6]; // 5 echo $arr["somearray"][13]; // 9 echo $arr["somearray"]["a"]; // 42 Αριθµητικοί τελεστές Τελεστής + - * / % ++ Νόηµα Πρόσθεση Αφαίρεση Πολλαπλασιασµός ιαίρεση ιαίρεση υπολοίπου Αύξηση Παράδειγµα $a + 5 $a - $b 5 * 3 5 / $a $a % 3 $a++ -- Μείωση $b-- 9
Τελεστές ανάθεσης Τελεστής = += -= *= /= %= Παράδειγµα $a = $b $a += $b $a -= $b $a *= $b $a /= $b $a %= $b Νόηµα $a = $b $a = $a + $b $a = $a - $b $a = $a * $b $a = $a / $b $a = $a % $b Τελεστές σύγκρισης Τελεστής Νόηµα Παράδειγµα == Ισούται $a == $b (false)!= εν ισούται $a!= $b (true) > Είναι µεγαλύτερο $a > $b (false) < Είναι µικρότερο $a < $b (true) >= Μεγαλύτερο ή ίσο $a >= $b (false) <= Μικρότερο ή ίσο $a <= $b (true) $a = 1 $b = 2 10
Τελεστές πινάκων Τελεστής Νόηµα Παράδειγµα + Ένωση στοιχεία από το δεύτερο πίνακα µε κοινά κλειδία επεγγράφονται $a + $b 1, 2 == Ισότητα ίδιες τιµές για αντίστοιχα κλειδία $a == $b (false) $a == $c (true) === Ταύτιση ίδιες τιµές για αντίστοιχα κλειδία µε την ίδια σειρά $a === $b (false) $a === $c (false)!= Ανισότητα $a!= $b (true)!== Μη ταύτιση $a!== $b (true) $a = array(1, 2) $b = array(2, 1) $c = array(1 => 2, 0=>1) Τελεστές λογικής Τελεστής Νόηµα Παράδειγµα && AND $a == $b && $a == 1 (false) OR $a == $b $a == 1 (true)! NOT!($a == $b) (true) $a = 1 $b = 2 11
H εντολή if if (συνθήκη) Εντολή που εκτελείται αν ικανοποιηθεί η συνθήκη; [ else Εντολή που εκτελείται αν δεν ικανοποιηθεί η συνθήκη; ] if (συνθήκη) Εντολές που εκτελούνται αν ικανοποιηθεί η συνθήκη; [ else Εντολές που εκτελούνται αν δεν ικανοποιηθεί η συνθήκη; ] Ηεντολήif - παράδειγµα <html> <body> <?php $d=date("d"); if ($d=="fri") echo "Have a nice weekend!"; else echo "Have a nice day!";?> </body> </html> 12
Ηεντολήswitch switch (έκφραση) case τιµή 1 : Κώδικας που εκτελέιται αν ισχύει η συνθήκη έκφραση == τιµή 1 ; break; // Χωρίς το break η εκτέλεση συνεχίζεται από εδώ case τιµή 2 : Κώδικας που εκτελέιται αν ισχύει η συνθήκη έκφραση == τιµή 2 ; break;... default: Κώδικας που εκτελέιται αν δέν ισχύει καµµία συνθήκη του τύπου έκφραση == τιµή n ; Ηεντολήswitch - παράδειγµα <html> <body> <?php switch ($username) case admin : echo Welcome administrator"; break; case guest : echo Welcome guest!"; break; default: echo Welcome $username";?> </body> </html> 13
Ηεντολήwhile while (συνθήκη) Εντολή που θα εκτελείται όσο ισχύει η συνθήκη; while (συνθήκη) Εντολές που θα εκτελούνται όσο ισχύει η συνθήκη; Ηεντολήwhile - παράδειγµα <html> <body> <?php $i=1; while ($i<=5) echo "The number is $i <br />"; $i++;?> </body> </html> 14
Ηεντολήdo while do Εντολές που θα εκτελεστούν µία φορά και για όσο ισχύει η συνθήκη; while (συνθήκη) Ηεντολήdo while - παράδειγµα <html> <body> <?php $i=7; do echo "The number is $i <br />"; $i++; while ($i<=5)?> </body> </html> 15
Ηεντολήfor for (εντολή έναρξης; συνθήκη; εντολή ολοκλήρωσης επανάληψης) Εντολές που εκτελούνται όσο ισχύει η συνθήκη; Εντολή έναρξης: εκτελείται µία φορα πριν ξεκινήσει ο βρόχος (loop). Συνήθως είναι η εντολή αρχικοδότησης (initialization) της µεταβλητής του βρόχου (loop variable). Συνθήκη: η συνθήκη που πρέπει να ισχύει ουτως ώστε να επαναληφθεί ο βρόχος. Συνήθως είναι µία σύγκριση που περιλαµβάνει τη µεταβλητή του βρόχου. Εντολή ολοκλήρωσης επανάληψης: εκτελέιται κάθε φορά που ολοκληρώνεται µά επανάληψη του βρόχου. Συνήθως χρησιµοποιείται για να αυξήσει ή να µειώσει την τιµή της µεταβλητής του βρόχου. Ηεντολήfor - σηµασία Ηεντολήfor αντιστοιχεί µε τον ακόλουθο κώδικα: Εντολή έναρξης; while (συνθήκη) Εντολές που εκτελούνται όσο ισχύει η συνθήκη; Εντολή ολοκλήρωσης επανάληψης; 16
Ηεντολήfor - παράδειγµα <html> <body> <?php for ($i=1; $i<=5; $i++) echo The number is $i<br />";?> </body> </html> Ηεντολήforeach Χρήσιµη για την ανάκτηση των στοιχείων ενός πίνακα αλλά όχι και για την τροποποίησή τους εκτός αν χρησιµοποιήσουµε αναφορά Επενεργεί πάνω σε ένα αντίγραφο του πίνακα εκτός αν χρησιµοποιήσουµε αναφορά foreach (όνοµα πίνακα as $όνοµα µεταβλητής τιµής στοιχείου) Εντολές που εκτελούνται για κάθε στοιχείο του πίνακα; foreach (όνοµα πίνακα as $όνοµα µεταβλητής κλειδιού στοιχείου => $όνοµα µεταβλητής τιµής στοιχείου) Εντολές που εκτελούνται για κάθε στοιχείο του πίνακα; 17
Ηεντολήforeach - παράδειγµα $a = array( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); foreach ($a as $k => $v) echo $k = $v<br/> ; Περιδίαβαση πινάκων Ο κάθε πίνακας έχει ένα εσωτερικό δείκτη (internal pointer) που υποδεικνύει το επόµενο στοιχείο που θα ανακτηθεί Ο δείκτης αυτός παραµένει στη θέση του µετά από την τελευταία ανάκτηση Για να τον επαναφέρουµε στο πρώτο στοιχείο του πίνακα χρησιµοποιούµε τηνεντολήreset() Γιαναανακτήσουµε το παρόν στοιχείο (δηλαδή αυτό που υποδεικνύει ο εσωτερικός δείκτης) χρησιµοποιούµε τη συνάρτηση current() Για να ανακτήσουµε το επόµενο στοιχείο και συνάµα να προχωρήσουµε τοδείκτησεαυτόχρησιµοποιούµε τη συνάρτηση next() Οµοίως για το προηγούµενο στοιχείο χρησιµοποιούµε τη συνάρτηση previous() Για το τελευταίο στοιχείο χρησιµοποιούµε τησυνάρτησηend() 18
Περιδίαβαση πινάκων παράδειγµα $transport = array('foot', 'bike', 'car', 'plane'); $mode = current($transport); // $mode = 'foot'; $mode = next($transport); // $mode = 'bike'; $mode = next($transport); // $mode = 'car'; $mode = prev($transport); // $mode = 'bike'; $mode = end($transport); // $mode = 'plane'; Περιδιάβαση πινάκων µε την εντολή list() και τη συνάρτηση each() $a = array( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); reset($a); // Χρειάζεται για να ξεκινήσουµε από το πρώτο στοιχείο while (list($k, $v) = each($a)) // Μπορούµε να τροποποιήσουµε // την τιµή του στοιχείου που επιστρέφεται // µέσω της µεταβλητής $v echo $k = $v<br/> ; 19
Για περισσότερες πληροφορίες www.php.net/manual/en 20