Ειςαγωγή ςτισ Συναρτήςεισ τησ PHP



Σχετικά έγγραφα
Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

Ιδιότθτεσ πεδίων Γενικζσ.

x n D 2 ENCODER m - σε n (m 2 n ) x 1 Παραδείγματα κωδικοποιθτϊν είναι ο κωδικοποιθτισ οκταδικοφ ςε δυαδικό και ο κωδικοποιθτισ BCD ςε δυαδικό.

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

16. Πίνακεσ και Συναρτήςεισ

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ

Παράςταςη ςυμπλήρωμα ωσ προσ 1

Η γλώςςα προγραμματιςμού C

ΟΝΟΜΑΣΟΛΟΓΙΑ ΠΑΡΑΜΕΣΡΩΝ ΓΙΑ ΠΡΟΑΡΜΟΜΕΝΕ ΑΝΑΦΟΡΕ. παραμζτρου> (Εμφανίηεται ςαν Caption ςτθν φόρμα των φίλτρων).

17. Πολυδιάςτατοι πίνακεσ

Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ

ςυςτιματα γραμμικϊν εξιςϊςεων

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

Εργαςτιριο Πικανοτιτων Σθμειϊςεισ προγραμματιςμοφ: βαςικζσ γνϊςεισ ανάπτυξθσ εφαρμογϊν. Κϊςτασ Αρβανιτάκθσ

Περιοριςμοί μιασ Β.Δ. ςτθν Access(1/3)

Θεςιακά ςυςτιματα αρίκμθςθσ

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

Εργαςτιριο Βάςεων Δεδομζνων

ΑΝΑΠΣΤΞΘ ΕΦΑΡΜΟΓΩΝ Ε ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 3 ο ΓΕΝΙΚΟ ΛΤΚΕΙΟ Ν. ΜΤΡΝΘ- ΕΠΙΜΕΛΕΙΑ: ΠΤΡΙΔΑΚΘ Λ.

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ

ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν

Διαχείριςη Αριθμοδεικτών (v.1.0.7)

Megatron ERP Βάςη δεδομζνων Π/Φ - κατηγοριοποίηςη Databox

Visual C Express - Οδηγός Χρήσης

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

Κάνουμε κλικ ςτθν επιλογι του οριηόντιου μενοφ «Get Skype»για να κατεβάςουμε ςτον υπολογιςτι μασ το πρόγραμμα του Skype.

Ηλεκτρονικι Επιχειρθςιακι Δράςθ Εργαςτιριο 1

Πρόςβαςη και δήλωςη μαθημάτων ςτον Εφδοξο

Modellus 4.01 Συ ντομοσ Οδηγο σ

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 3: Εργονομία

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε)

ΕΝΟΣΘΣΑ 1: ΓΝΩΡIΗΩ ΣΟΝ ΤΠΟΛΟΓΙΣΘ Ω ΕΝΙΑΙΟ ΤΣΘΜΑ. ΚΕΦΑΛΑΙΟ 1: Ψθφιακόσ Κόςμοσ

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες)

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

8 τριγωνομετρία. βαςικζσ ζννοιεσ. γ ςφω. εφω και γ. κεφάλαιο

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

Ανάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων

Μονάδες 6. Μονάδες ΓΑΨΕ Δεν υπάρχει ρίηα 2. ΑΝ Α>0 ΤΟΤΕ 3. ΤΕΛΟΣ_ΑΝ 4. ΑΛΛΙΩΣ 5. ίηα Τ_(Α)

ΕΡΓΑΣΗΡΙΟ ΕΦΑΡΜΟΜΕΝΗ ΠΛΗΡΟΦΟΡΙΚΗ

Σφντομεσ Οδθγίεσ Χριςθσ

Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων. (v.1.0.7)

Βαγγζλθσ Οικονόμου Διάλεξθ 7. Συναρτιςεισ Μζροσ 2ο

= = 124

Εγχειρίδιο Χρήςησ Support

Πολυπλέκτες. 0 x 0 F = S x 0 + Sx 1 1 x 1

ΜΑΘΗΜΑΤΙΚΑ Α Γυμνασίου

Διδάςκων: Κωνςταντίνοσ τεφανίδθσ

Διαδικαζία Διατείριζης Εκηύπωζης Ιζοζσγίοσ Γενικού - Αναλσηικών Καθολικών. (v )

Ανάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον

Joomla! - User Guide

Περιεχόμενα. χολι Χοροφ Αντιγόνθ Βοφτου - Πολιτικι Διαχείριςθσ Cookie 1

ΥΡΟΝΣΙΣΗΡΙΟ Μ. Ε. ΚΑΙ ΚΕΝΣΡΟ ΙΔΙΑΙΣΕΡΩΝ ΜΑΘΗΜΑΣΩΝ «ΚΤΡΙΣΗ» ΔΙΑΓΩΝΙΜΑ ΘΕΜΑΣΑ Β ΛΤΚΕΙΟΤ ΥΕΒΡΟΤΑΡΙΟ 2018 ΑΕΠΠ

Μεθολογία αςκιςεων αραίωςησ και ανάμειξησ διαλυμάτων (με τθν ίδια δ. ουςία).

Ε. ε περίπτωςθ που θ διαφορά των δφο ηαριϊν είναι 3 τότε ο παίκτθσ ξαναρίχνει μόνο ζνα ηάρι.

Ενεργειακά Τηάκια. Πουκεβίλ 2, Ιωάννινα Τθλ

Multi Logo. Προγραμματιςμόσ Η/Υ με Multi Logo. Σχεδίαςη και ανάπτυξη εφαρμογήσ κίνηςησ αντικειμζνου

Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ

ΦΥΕ 14 ΑΚΑΔ. ΕΤΟΣ Η ΕΡΓΑΣΙΑ. Ημερομηνία παράδοςησ: 12 Νοεμβρίου (Όλεσ οι αςκιςεισ βακμολογοφνται ιςοτίμωσ με 10 μονάδεσ θ κάκε μία)

Ακολουκιακά Λογικά Κυκλώματα

Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ

ΗΥ101: Ειςαγωγι ςτθν Πλθροφορικι

ΑΝΣΙΣΡΟΦΗ ΤΝΑΡΣΗΗ. f y x y f A αντιςτοιχίηεται ςτο μοναδικό x A για το οποίο. Παρατθριςεισ Ιδιότθτεσ τθσ αντίςτροφθσ ςυνάρτθςθσ 1. Η. f A τθσ f.

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν

Σχεδίαςη Σφγχρονων Ακολουθιακών Κυκλωμάτων

ΟΔΗΓΙΕ ΔΗΜΙΟΤΡΓΙΑ ΚΑΙ ΡΤΘΜΙΗ ΔΩΡΕΑΝ ΗΛΕΚΣΡΟΝΙΚΟΤ ΣΑΧΤΔΡΟΜΕΙΟΤ ΣΟ GOOGLE (G-MAIL)

Άςκθςθ 1θ: Να γραφεί αλγόρικμοσ που κα δθμιουργεί με τθ βοικεια διπλοφ επαναλθπτικοφ βρόχου, τον ακόλουκο διςδιάςτατο πίνακα:

Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων»

MySchool Πρακτικζσ οδθγίεσ χριςθσ

Ποσοτικές Μέθοδοι Δρ. Χάϊδω Δριτσάκη

Virtualization. Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format.

SingularLogic Application. Παραμετροποίηση Galaxy Application Server

Η θεωρία τησ ςτατιςτικήσ ςε ερωτήςεισ-απαντήςεισ Μέροσ 1 ον (έωσ ομαδοποίηςη δεδομένων)

P, τότε: P και το μζςο πλικοσ των εμφανίςεων του γεγονότοσ ςτθ μονάδα του. X t το πλικοσ των εμφανίςεων του γεγονότοσ ςτο διάςτθμα. 0, t.

Κατά τθν ενεργοποίθςθ τθσ ιδιότθτασ αυτισ ενδζχεται να εμφανιςτεί ζνα μινυμα ςαν αυτό τθσ παρακάτω εικόνασ. Απλά επιβεβαιϊςτε πατϊντασ ΟΚ.

(Α3 1 ) Σασ δίνεται το παρακάτω αλγορικμικό τμιμα

Ραραμετροποίθςθ ειςαγωγισ δεδομζνων περιόδων

Οδηγόσ εγκατάςταςησ και ενεργοποίηςησ

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 20. Αρχεία. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Λαμβάνοντασ υπόψη ότι κατά την πρόςθεςη δφο δυαδικϊν ψηφίων ιςχφει: Κρατοφμενο

Οδηγίες Πρόζβαζης ζηο EndNote Web. Πρόζβαζη ζηο EndNote Web

Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων. 18. Αλφαριθμητικά. Ιωάννθσ Κατάκθσ. ΕΡΛ 032: Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων

Πωσ δθμιουργώ φακζλουσ;

ΕΝΟΣΗΣΑ 3: ΧΡΗΗ ΕΡΓΑΛΕΙΩΝ ΕΚΦΡΑΗ ΚΑΙ ΔΗΜΙΟΤΡΓΙΑ

ΜΑΘΗΜΑΤΙΚΑ ΕΠΙΠΕΔΟ 5 6 (Ε - ΣΤ Δημοτικού)

Ονοματεπϊνυμο.. ΔΙΑΓΩΝΙΣΜΑ ΑΕΠΠ

Transcript:

Ειςαγωγή ςτισ Συναρτήςεισ τησ PHP Οι ςυναρτιςεισ (functions) τθσ PHP, δθλ. αυτζσ που υπάρχουν ενςωματωμζνεσ μζςα ςτθν PHP αλλά και αυτζσ που δθμιουργοφμε μόνοι μασ, διευκολφνουν πολφ το γράψιμο του κϊδικα κακϊσ μασ δίνουν τθ δυνατότθτα να επαναχρθςιμοποιιςουμε τον κϊδικα που ζχουν γράψει κάποιοι άλλοι χριςτεσ και μποροφμε ακόμθ να κάνουμε τα δικά μασ scripts να ζχουν μικρό μζγεκοσ και να είναι ζτςι πιο εφκολα ςτθ διαχείριςι τουσ. Κακϊσ θ PHP 5 περιζχει περιςςότερεσ από 2.500 ςυναρτιςεισ, μπορεί να ςκεφκοφμε ότι είναι μια πολφ εφκολθ γλϊςςα προγραμματιςμοφ, αλλά θ αλικεια είναι ότι θ κάκε ςυνάρτθςθ πρζπει να χρθςιμοποιείται με διαφορετικό τρόπο και ζτςι πρζπει να μακαίνεται ξεχωριςτά. Θα ξεκινιςουμε με τισ πιο χριςιμεσ και πιο απλζσ ςυναρτιςεισ που διακζτει θ PHP. Για να αποφφγουμε να γράφουμε τα ίδια κομμάτια κϊδικα κάκε φορά που κζλουμε να κάνουμε τθν ίδια εργαςία, θ PHP μάσ δίνει τθ δυνατότθτα να ενςωματϊςουμε κάποιον κϊδικα ςε μια ςυνάρτθςθ τθν οποία κα μποροφμε μετά να καλζςουμε από οπουδιποτε μζςα από ζνα script. Η PHP διακζτει μερικζσ εκατοντάδεσ ενςωματωμζνεσ ςυναρτήςεισ (built-in functions) για να κάνουμε πολλζσ δουλειζσ, όπωσ διάβαςμα αρχείων και χειριςμό strings μζχρι και αναηθτιςεισ ςε βάςεισ δεδομζνων και ςφνδεςθ μ ζναν IRC server. Αν διαπιςτϊςουμε ότι δεν υπάρχει κάποια ςυνάρτθςθ που τθν χρειαηόμαςτε, μποροφμε να προςκζςουμε τθ δικι μασ ς ζνα script και αυτζσ είναι γνωςτζσ ωσ οι ςυναρτήςεισ του χρήςτη (user functions). Θα δοφμε αρχικά το πϊσ μποροφμε να χρθςιμοποιιςουμε τισ ενςωματωμζνεσ ςυναρτιςεισ τθσ PHP μζςα από τα δικά μασ scripts. Η κλιςθ μιασ ςυνάρτθςθσ γίνεται πολφ απλά γράφοντασ το όνομά τθσ ακολουκοφμενο από δφο παρενκζςεισ. Πολλζσ ςυναρτιςεισ δζχονται παραμζτρουσ (parameters), δθλ. τιμζσ που χρθςιμοποιοφνται για να επθρεάςουν τθν εκτζλεςθ και φυςικά και το αποτζλεςμα τθσ ςυνάρτθςθσ. Επίςθσ, όλεσ ςχεδόν οι ςυναρτιςεισ ζχουν και μια τιμή επιςτροφήσ (return value), που είναι το αποτζλεςμα από τθν εκτζλεςθ των εντολϊν τθσ ςυνάρτθςθσ και μποροφμε μάλιςτα να χρθςιμοποιιςουμε τθν τιμι επιςτροφισ μιασ ςυνάρτθςθσ ωσ παράμετρο ς άλλεσ ςυναρτιςεισ, ωσ εξισ : func1(func2(func3(), func4())); Θα πρζπει να ζχουμε υπόψθ μασ ότι με τον όρο παράμετροι εννοοφμε τισ μεταβλθτζσ που εμφανίηονται ςτθ διλωςθ τθσ ςυνάρτθςθσ και που ορίηουν ποιεσ τιμζσ πρζπει να μεταβιβαςκοφν ςτθ ςυνάρτθςθ, ενϊ οι πραγματικζσ παράμετροι που μεταβιβάηονται όταν γίνεται θ κλιςθ μιασ ςυνάρτθςθσ αποκαλοφνται ορίςματα (arguments). Βζβαια, ουςιαςτικι διαφορά δεν υπάρχει ανάμεςα ςτουσ δφο αυτοφσ

όρουσ και πολλοί χρθςιμοποιοφν τουσ όρουσ «παράμετροι» και «ορίςματα» για να αναφζρονται ςτο ίδιο πράγμα. Κάτι άλλο που κα πρζπει να ζχουμε υπόψθ μασ είναι ότι ενϊ μερικζσ παράμετροι είναι υποχρεωτικζσ, δθλ. κα πρζπει να καταχωριςουμε κάποια τιμι γι αυτζσ, κάποιεσ άλλεσ είναι προαιρετικζσ, δθλ. μποροφμε να μθν γράψουμε κάτι ςτθ κζςθ τουσ. Στθν περίπτωςθ αυτι, θ PHP κα χρθςιμοποιιςει μια δικι τθσ προκακοριςμζνθ τιμι (default value). Όταν μεταβιβάηουμε μια παράμετρο ςε μια ςυνάρτθςθ, θ PHP ςτθν πραγματικότθτα χρθςιμοποιεί ζνα αντίγραφο τθσ τιμισ τθσ και αυτό ςθμαίνει ότι μποροφμε να τροποποιιςουμε τισ μεταβλθτζσ μζςα ςε μια ςυνάρτθςθ αλλά δεν κα αλλάξουν και οι αντίςτοιχεσ τιμζσ τουσ εκτόσ τθσ ςυνάρτθςθσ. Για να αλλάξουμε αυτι τθν κατάςταςθ, μποροφμε να επιλζξουμε να μεταβιβάςουμε μια μεταβλθτι με αναφορά (by reference), οπότε θ PHP μεταβιβάηει τθν πραγματικι μεταβλθτι μζςα ςτθ ςυνάρτθςθ και αυτό ςθμαίνει ότι όποιεσ αλλαγζσ κάνουμε ςτθν τιμι τθσ μεταβλθτισ κα επθρεάςουν και τθν αρχικι τιμι τθσ. Αυτό κα φανεί καλφτερα ςτο παρακάτω script : somefunc($a); somefunc($a, $b); somefunc($a, &$b); somefunc(&$a, &$b); Η πρϊτθ γραμμι του κϊδικα καλεί τθ ςυνάρτθςθ somefunc() και τθσ μεταβιβάηει ζνα αντίγραφο τθσ μεταβλθτισ $a, θ δεφτερθ γραμμι του κϊδικα μεταβιβάηει αντίγραφα των $a και $b, θ τρίτθ μεταβιβάηει ζνα αντίγραφο τθσ $a και τθν αρχικι τιμι τθσ $b και τζλοσ, θ τελευταία γραμμι κϊδικα μεταβιβάηει τισ αρχικζσ τιμζσ και τθσ $a και τθσ $b. Η μεταβίβαςθ με αναφορά (passing by reference), όπωσ ςυμβαίνει με τθ μεταβλθτι $b ςτθν 3 θ γραμμι και τισ μεταβλθτζσ $a και $b ςτθν 4 θ γραμμι κϊδικα, ςθμαίνει ότι αυτζσ οι μεταβλθτζσ μπορεί να αλλάξουν μζςα ςτθ ςυνάρτθςθ, που είναι κι ζνασ τρόποσ για να επιςτρζφουν τιμζσ οι ςυναρτιςεισ. Τα Πρωτότυπα των Συναρτήςεων Ο ςτάνταρτ τρόποσ για να περιγράψουμε τισ παραμζτρουσ που δζχεται και τθν τιμι που επιςτρζφει μια ςυνάρτθςθ είναι με το πρωτότυπο μιασ ςυνάρτθςθσ (function

prototype). Η κατανόθςι του είναι πολφ ςθμαντικι για τθ ςυνζχεια. Θα δοφμε αρχικά το πρωτότυπο τθσ ςυνάρτθςθσ strtoupper() : string strtoupper ( string string) Αυτό που καταλαβαίνουμε με μια πρϊτθ ματιά είναι ότι θ ςυνάρτθςθ δζχεται ζνα string ωσ παράμετρο και επιςτρζφει επίςθσ ζνα string. Μπορεί να μασ μπερδεφει θ ζκφραςθ "stringstring", που ςθμαίνει ότι ο τφποσ δεδομζνων τθσ παραμζτρου είναι string αλλά και το όνομα που δίνουμε ςτθν παράμετρο είναι επίςθσ string. Η ςυνάρτθςθ επιςτρζφει μια τιμι string και βλζπουμε ότι ο τφποσ δεδομζνων τθσ τιμισ επιςτροφισ αναγράφεται πριν από το όνομα τθσ ςυνάρτθςθσ, που αποτελεί μια ακόμα πρακτικι τθσ C. Για τισ παραμζτρουσ που μεταβιβάηονται με αναφορά (by reference), χρθςιμοποιοφμε ωσ πρόκεμα το ςφμβολο &. Θα δοφμε τϊρα το πρωτότυπο τθσ ςυνάρτθςθσ sha1() : string sha1 ( string source [, bool raw_output]) Όπωσ μποροφμε να δοφμε, θ ςυνάρτθςθ sha1() επιςτρζφει μια τιμι string, δζχεται ζνα string ωσ τθν πρϊτθ παράμετρό τθσ και μια τιμι boolean ωσ τθ δεφτερθ παράμετρό τθσ. Όμωσ, θ δεφτερθ παράμετροσ βρίςκεται ανάμεςα ςε αγκφλεσ, που ςθμαίνει ότι είναι προαιρετικι. Στα πρωτότυπα υπάρχουν δφο ειδικοί τφποι δεδομζνων, οι number και mixed. Το numberμπορεί να είναι ζνασ αρικμόσ κινθτισ υποδιαςτολισ (floating-point) ι ζνασ ακζραιοσ αρικμόσ (integer) και το mixed ςθμαίνει ότι θ ςυνάρτθςθ δζχεται ι επιςτρζφει δφο ι περιςςότερουσ τφπουσ δεδομζνων. Για παράδειγμα, ο οριςμόσ τθσ ςυνάρτθςθσ pow() είναι ο εξισ : number pow ( number base, number exp) Αυτό ςθμαίνει ότι δζχεται οποιουςδιποτε αρικμοφσ ωσ παραμζτρουσ και μπορεί να επιςτρζψει ζναν οποιονδιποτε αρικμό. Ο οριςμόσ τθσ ςυνάρτθςθσ serialize() είναι ο εξισ : string serialize ( mixed value) Η ςυνάρτθςθ serialize() εργάηεται και με αντικείμενα (objects) και με τάξεισ (classes), οπότε θ παράμετρόσ τθσ είναι του τφπου mixed. Υπάρχει και ο γνωςτόσ τφποσ δεδομζνων void, που ςθμαίνει ότι θ ςυνάρτθςθ δεν επιςτρζφει κάποια τιμι ι ότι δεν δζχεται κάποια παράμετρο ωσ είςοδο. Θα δοφμε και τον ςυμβολιςμό "...", που ςθμαίνει ότι θ ςυνάρτθςθ δζχεται ζναν μεταβλθτό αρικμό παραμζτρων. Για παράδειγμα, το πρωτότυπο τθσ ςυνάρτθςθσ isset() είναι το εξισ : bool isset ( mixed var [, mixed var [, mixed...]])

Η παραπάνω ςυνάρτθςθ δζχεται μία τουλάχιςτον παράμετρο ωσ είςοδο, αλλά μπορεί να δεχκεί και περιςςότερεσ κακϊσ υπάρχει ο ςυμβολιςμόσ "...". Συναρτήςεισ για τον Ζλεγχο Μεταβλητών bool isset ( mixed var [, mixed var [, mixed...]]) void unset ( mixed var [, mixed var [, mixed...]]) bool empty ( mixed var) Υπάρχουν τρεισ πολφ βαςικζσ ςυναρτιςεισ με τισ οποίεσ μποροφμε να ελζγχουμε τισ μεταβλθτζσ, οι isset(), empty() και unset(). Η ςυνάρτθςθ isset() επιςτρζφει τθν τιμι true αν θ μεταβλθτι που τθσ μεταβιβάηεται ωσ παράμετροσ ζχει ιδθ οριςκεί μζςα ςτο script, ενϊ θ ςυνάρτθςθ empty(), θ οποία δζχεται μία μόνο παράμετρο, επιςτρζφει τθν τιμι true αν θ μεταβλθτι ζχει τθν τιμι false. Για να ελζγξουμε αν μια μεταβλθτι δεν ζχει οριςκεί, μποροφμε να χρθςιμοποιιςουμε τον τελεςτι άρνθςθσ! και να δϊςουμε τθν εντολι "if(!isset($a))". Η ςυνάρτθςθ unset() διαγράφει πλιρωσ μια ιδθ υπάρχουςα μεταβλθτι, που ςθμαίνει ότι αν μετά χρθςιμοποιιςουμε τθ ςυνάρτθςθ isset(), αυτι κα επιςτρζψει τθν τιμι false. Συναρτήςεισ για τον Ζλεγχο τησ Εκτζλεςησ του Script void exit ( [mixed status]) mixed eval ( [string code_string]) void die ( [mixed status]) Η ςυνάρτθςθ exit() λαμβάνει μία μόνο προαιρετικι παράμετρο και ςταματάει αμζςωσ τθν εκτζλεςθ του script. Αν υπάρχει παράμετροσ, κα εκτελεςτεί ο κϊδικασ που αυτι περιζχει ι αν είναι string κα εμφανιςκεί το περιεχόμενό του. Η ςυνάρτθςθ die() είναι ςχεδόν ίδια με τθ ςυνάρτθςθ exit(), ενϊ θ ςυνάρτθςθ eval() λαμβάνει ζνα string ωσ παράμετρο το οποίο και εκτελεί ςαν να ιταν PHP κϊδικασ. Ακολουκοφν παραδείγματα με τισ ςυναρτιςεισ exit() και eval() : $str = "exit()"; eval($str);

Το παραπάνω script εκχωρεί το string "exit()" ςτθ μεταβλθτι $str και μετά μεταβιβάηει το $str ςτθ ςυνάρτθςθ eval(), θ οποία κα εκτελζςει το string ςαν να ιταν PHP κϊδικασ και ζτςι το τελικό αποτζλεςμα είναι ότι θ PHP εκτελεί τθ ςυνάρτθςθ exit() μζςω τθσ eval() και ςταματάει τθν εκτζλεςθ του script. Με τθ ςυνάρτθςθ exit() μποροφμε να τερματίςουμε τθν εκτζλεςθ ενόσ script, όπωσ για παράδειγμα : if ($a!= $blahblah) { } print "Απαγοπεύεηαι η ππόζβαζη"; exit; Η ςυνάρτθςθ die() χρθςιμοποιείται ςυνικωσ ωσ εξισ : do_some_func() OR die("η do_some_func() επέζηπετε false!"); Σφμφωνα με τον παραπάνω κϊδικα, κα κλθκεί θ ςυνάρτθςθ do_some_ func() και αν επιςτρζψει τθν τιμι false, κα κλθκεί θ ςυνάρτθςθ die() για να τερματίςει το script. Αυτό αποτελεί ζναν γριγορο και εφκολο τρόπο για να είμαςτε ςίγουροι ότι κάποιεσ ςυναρτιςεισ ζχουν εκτελεςτεί με επιτυχία πριν ςυνεχίςουμε με τον υπόλοιπο κϊδικα του script. Όπωσ ιδθ γνωρίηουμε, θ PHP κα εκτελζςει τθ δεφτερθ ςυνάρτθςθ μόνο αν θ πρϊτθ ςυνάρτθςθ επιςτρζψει τθν τιμι false. Εκείνο που πρζπει να ζχουμε υπόψθ μασ είναι ότι ο τελεςτισ, δθλ. το ιςοδφναμο του τελεςτι OR, ζχει υψθλότερθ προτεραιότθτα από τον τελεςτι OR αλλά υψθλότερθ προτεραιότθτα και από τον τελεςτι =. Αυτό κα το καταλάβουμε καλφτερα με το επόμενο παράδειγμα : $fp = fopen("somefile", "r") die("το απσείο δεν άνοιξε!"); Από μια πρϊτθ ματιά φαίνεται ίδιο με το προθγοφμενο παράδειγμα τθσ ςυνάρτθςθσ die(), δθλ. θ PHP κα προςπακιςει να φορτϊςει το αρχείο "somefile" και κα δθμιουργιςει ζναν δείκτθ αρχείου (file pointer) ςτθ μεταβλθτι $fp και αν αυτό αποτφχει, κα τερματίςει (exit) τθν εκτζλεςθ του script με το μινυμα "Το αρχείο δεν άνοιξε!". Όμωσ, δεν ςυμβαίνει κάτι τζτοιο και αυτό επειδι ο τελεςτισ ζχει υψθλότερθ προτεραιότθτα από τον τελεςτι =, είναι αυτόσ που υπολογίηεται πρϊτοσ. Ζτςι, θ PHP κα προςπακιςει πρϊτα να φορτϊςει το αρχείο somefile και αν επιτφχει, θ ςυνάρτθςθ fopen() κα επιςτρζψει ζνα resource που κα είναι true. Η ςυνάρτθςθ die() πάντα αποτιμάται ωσ true.

Όμωσ, επειδι θ PHP κα βραχυκυκλϊςει τον τελεςτι, όταν θ ςυνάρτθςθ fopen() επιτφχει, θ ςυνάρτθςθ die() δεν κα κλθκεί και ο τελεςτισ κα επιςτρζψει τθν τιμι 1 (true) επειδι ο τελεςτζοσ που βρίςκεται ςτα αριςτερά του (κλιςθ ςτθ ςυνάρτθςθ fopen()) επζςτρεψε τθν τιμι true. Στθν ουςία, θ PHP διαβάηει τθν παραπάνω γραμμι κϊδικα ωσ εξισ : $fp = (fopen("somefile", "r") die("το απσείο δεν άνοιξε!")); Η τιμι 1 κα εκχωρθκεί ςτθ μεταβλθτι $fp. Δεν κα κζλαμε, όμωσ, κάτι τζτοιο και ζτςι κα πρζπει να χρθςιμοποιιςουμε τον τελεςτι OR. Κακϊσ ο τελεςτισ OR ζχει χαμθλότερθ προτεραιότθτα από τον τελεςτι =, θ PHP κα διαβάςει τθ γραμμι του κϊδικα ωσ εξισ : ($fp = fopen("somefile", "r")) or die("το απσείο δεν άνοιξε!"); Αυτό ςθμαίνει ότι καλείται θ ςυνάρτθςθ fopen() και θ τιμι τθσ εκχωρείται ςτθ μεταβλθτι $fp, θ οποία μετά ςτζλνεται ςτον τελεςτι ςφγκριςθσ. Ζχουμε ανάγκθ και από τουσ δφο τελεςτζσ και OR, αλλά κα πρζπει να επιλζξουμε αυτόν που χρειαηόμαςτε κάκε φορά. Οι Συναρτήςεισ Ημερομηνίασ και Ώρασ Η PHP παριςτάνει τον χρόνο ωσ τον αρικμό των δευτερολζπτων που ζχουν παρζλκει από τθν 1 θ Ιανουαρίου του 1970 και ϊρα 00:00:00 GMT, μια θμερομθνία που είναι γνωςτι ωσ θ αρχι τθσ εποχισ του Unix (Unix epoch). Αυτόσ ο τρόποσ αποκικευςθσ θμερομθνιϊν μπορεί να μασ φαίνεται περίεργοσ αλλά είναι εξαιρετικά βολικόσ κακϊσ μποροφμε να αποκθκεφςουμε μια οποιαδιποτε θμερομθνία με τθ μορφι ενόσ ακεραίου αρικμοφ και μετά να μετατρζψουμε αυτόν τον αρικμό ςε μια μορφι θμερομθνίασ που να είναι κατανοθτι από τον άνκρωπο. Διάβαςμα τησ Τρζχουςασ Ώρασ int time ( ) mixed microtime ( [bool get_as_float]) Η PHP διακζτει μια βαςικι ςυνάρτθςθ για να διαβάςουμε τθν τρζχουςα ϊρα ςτθ μορφι epoch, τθν time(). Η ςυνάρτθςθ time() δεν δζχεται παραμζτρουσ και επιςτρζφει τθν τρζχουςα ϊρα, που είναι γνωςτι και ωσ ςφραγίδα χρόνου (timestamp). Ακολουκεί ζνα παράδειγμα :

print time()."<br>"; $a = time(); print $a; Το αποτζλεςμα από τθν εκτζλεςθ του παραπάνω script κα είναι το εξισ : 1196975018 1196975018 Όπωσ βλζπουμε και από το παραπάνω παράδειγμα, μποροφμε είτε να εκτυπϊςουμε απευκείασ τθν τιμι επιςτροφισ τθσ ςυνάρτθςθσ time() ι μποροφμε να τθν αποκθκεφςουμε ςε μια μεταβλθτι και μετά να εκτυπϊςουμε τθν τιμι τθσ μεταβλθτισ. Το αποτζλεςμα είναι το ίδιο. Μποροφμε να χρθςιμοποιιςουμε τθ ςυνάρτθςθ microtime() για πιο ακριβείσ τιμζσ ϊρασ. Όταν καλείται αυτι θ ςυνάρτθςθ χωρίσ κάποια παράμετρο, επιςτρζφει τθν τρζχουςα ϊρα του ςυςτιματοσ ςε δευτερόλεπτα (seconds) και εκατομμυριοςτά του δευτερολζπτου (microseconds), με πρϊτα τα εκατομμυριοςτά του δευτερολζπτου. Για παράδειγμα : 0.82112000 1174676574 Αν δϊςουμε τθν τιμι true ωσ παράμετρο ςτθ ςυνάρτθςθ microtime(), θ PHP κα επιςτρζψει τθν ϊρα ςτθ μορφι seconds.microseconds, ωσ εξισ : 1174676587.5996 Με τθ ρφκμιςθ precision ςτο αρχείο php.ini μποροφμε να ορίςουμε τον αρικμό των ςθμαντικϊν ψθφίων (significant digits) που κζλουμε να εμφανίηονται ς ζναν αρικμό κινθτισ υποδιαςτολισ (floating-point number). Δημιουργία Ημερομηνίασ από ζνα String int strtotime ( string time [, int now]) Η μετατροπι μιασ θμερομθνίασ από τθν καταχϊρθςθ ενόσ χριςτθ ςτθ μορφι Unix timestamp μπορεί να είναι επικίνδυνθ κακϊσ κάποιοι χριςτεσ καταχωροφν τισ θμερομθνίεσ με τθ μορφι θθ/μμ/εε, άλλοι με τθ μορφι εε-μμ-θθ, άλλοι με τθ μορφι θθ-μμ-εεεε κοκ. Η ςυνάρτθςθ που παρζχει θ PHP για τθ μετατροπι ενόσ string ςε μορφι timestamp, θ strtotime(), λαμβάνει δφο παραμζτρουσ : το string

τθσ ϊρασ και μια δεφτερθ προαιρετικι παράμετρο που μπορεί να είναι ζνα ςχετικό timestamp. Η πρϊτθ παράμετροσ είναι ςθμαντικι και κα τθν δοφμε αμζςωσ παρακάτω : print strtotime("22nd December 1979"); print strtotime("22 Dec. 1979 17:30"); print strtotime("1979/12/22"); Βλζπουμε ότι χρθςιμοποιιςαμε τρεισ τρόπουσ για να παραςτιςουμε τθν ίδια θμερομθνία, όπου ςτον δεφτερο τρόπο ςυμπεριλάβαμε και τθν ϊρα. Αν τρζξουμε το παραπάνω script, κα δοφμε ότι θ PHP εμφανίηει ζναν ακζραιο για τθν κάκε εντολι, όπου ο πρϊτοσ και ο τρίτοσ αρικμόσ είναι ίδιοι και ο δεφτεροσ είναι λίγο διαφορετικόσ. Αυτοί οι αρικμοί είναι οι λεγόμενεσ ςφραγίδεσ χρόνου του Unix (Unix timestamps) που αντιςτοιχοφν ςτισ θμερομθνίεσ που μεταβιβάςαμε ςτθ ςυνάρτθςθ strtotime(), θ οποία ζκανε και τθ μετατροπι. Θα πρζπει να ζχουμε υπόψθ μασ ότι θ ςυνάρτθςθ strtotime() χρθςιμοποιεί το αμερικάνικο ςτυλ για τισ θμερομθνίεσ, δθλ. βάηει πρϊτα τον μινα, όπωσ ςτθν θμερομθνία 10/11/2007, όπου κεωρεί ότι είναι 11 Οκτωβρίου και όχι 10 Νοεμβρίου. Αν θ PHP δεν μπορζςει να μετατρζψει το string ςε μορφι timestamp, κα επιςτρζψει τθν τιμι -1. Αυτό μποροφμε να το χρθςιμοποιιςουμε για να ελζγχουμε αν ζγινε ςωςτά θ μετατροπι μιασ θμερομθνίασ, ωσ εξισ : $mydate = strtotime("christmas 2006"); if ($mydate == -1) { print "Η μεηαηποπή ηηρ ημεπομηνίαρ απέηςσε!"; } else { print "Η μεηαηποπή ηηρ ημεπομηνίαρ έγινε!"; }

Όπωσ είδαμε νωρίτερα, θ ςυνάρτθςθ strtotime() διακζτει και μια δεφτερθ προαιρετικι παράμετρο που τθν χρθςιμοποιεί ωσ βάςθ για τον υπολογιςμό ςχετικϊν θμερομθνιϊν. Ο λόγοσ γι αυτό είναι ότι θ πρϊτθ παράμετροσ μπορεί να περιζχει ςχετικζσ τιμζσ, όπωσ "Next Sunday", "2 days" ι "1 year ago" κοκ. Σ αυτιν τθν περίπτωςθ, θ PHP πρζπει να γνωρίηει με ποια βάςθ κα υπολογίςει αυτζσ τισ ςχετικζσ τιμζσ. Ακολουκοφν μερικά παραδείγματα : print strtotime("next Sunday"); 2)); print strtotime("2 days", time() - (86400 * print strtotime("1 year ago", 123456789); Η πρϊτθ γραμμι κα εμφανίςει το timestamp για τθν επόμενθ Κυριακι. Η δεφτερθ γραμμι κα επιςτρζψει τθν τρζχουςα ϊρα, δθλ. δφο θμζρεσ από τϊρα μείον δφο θμζρεσ (86400 = 24 Χ 60 Χ 60). Η τελευταία εντολι αφαιρεί ζνα ζτοσ από ζνα δεδομζνο timestamp. Μετατροπή Ημερομηνιών ςε String string date ( string format [, int timestamp]) Η PHP διακζτει πάρα πολλζσ επιλογζσ για να μετατρζψουμε timestamps ςε strings με τθ ςυνάρτθςθ date(). Η ςυνάρτθςθ date() δζχεται δφο παραμζτρουσ, όπου θ δεφτερθ είναι προαιρετικι. Η πρϊτθ παράμετροσ είναι ζνα ειδικό string που περιζχει κωδικοφσ μορφοποίθςθσ για το πϊσ κζλουμε να εμφανιςκεί θ θμερομθνία. Η δεφτερθ παράμετροσ είναι τοtimestamp που κζλουμε να μετατρζψουμε, όπου αν δεν δϊςουμε κάποια τιμι, θ PHP κα κεωριςει ότι κζλουμε να μετατρζψουμε το τρζχον timestamp. Η πρϊτθ παράμετροσ είναι το κλειδί και είναι ζνα string από γράμματα από μια προκακοριςμζνθ λίςτα 31 δυνατϊν τιμϊν. Αν χρθςιμοποιιςουμε άλλουσ χαρακτιρεσ ςτο string, αυτοί κα αντιγραφοφν απευκείασ μζςα ςτθ μορφοποιθμζνθ θμερομθνία. Αν κελιςουμε να ςυμπεριλάβουμε κάποιο κείμενο μζςα ςτθ μορφοποιθμζνθ θμερομθνία αλλά να μθν εκλθφκεί ωσ παράμετροσ, κα πρζπει να χρθςιμοποιιςουμε τον χαρακτιρα \ (backslash). Ακολουκεί θ ολοκλθρωμζνθ λίςτα των χαρακτιρων που χρθςιμοποιοφνται για τθ μορφοποίθςθ των θμερομθνιϊν και δεν κα πρζπει να ξεχνάμε ότι είναι case sensitive, δθλ. ξεχωρίηουν τα πεηά από τα κεφαλαία γράμματα.

Χαρακτήρασ Μορφοποίηςησ Περιγραφή Παράδειγμα a Το am/pm με πεηά γράμματα am ι pm A Το am/pm με κεφαλαία γράμματα AM ι PM B Swatch Internet Time 000 ζωσ 999 c Η θμερομθνία, θ ϊρα και θ ηϊνθ τθσ ϊρασ (time zone) ςφμφωνα με το ISO8601 2007-12- 01T09:26:55+01:00 d Ο αρικμόσ του μινα με 2 ψθφία 01 ζωσ 31 D Το όνομα τθσ θμζρασ με 3 γράμματα Mon, Thu, Sat F Το πλιρεσ όνομα του μινα January, August g G h H i Η ϊρα ςε 12ωρθ μορφι, χωρίσ μθδενικά μπροςτά Η ϊρα ςε 24ωρθ μορφι, χωρίσ μθδενικά μπροςτά Η ϊρα ςε 12ωρθ μορφι, με μθδενικά μπροςτά Η ϊρα ςε 24ωρθ μορφι, με μθδενικά μπροςτά Τα λεπτά τθσ ϊρασ με μθδενικά μπροςτά 1 ζωσ 12 0 ζωσ 23 01 ζωσ 12 00 ζωσ 23 00 ζωσ 59 I Αν είναι ενεργι θ κερινι ϊρα 1 αν ναι, 0 αν όχι j Η θμζρα του μινα, χωρίσ μθδενικά μπροςτά 1 ζωσ 31 l Το πλιρεσ όνομα τθσ θμζρασ Monday, Saturday L Αν πρόκειται για δίςεκτο ζτοσ 1 αν ναι, 0 αν όχι m Ο αρικμόσ του μινα, με μθδενικά μπροςτά 01 ζωσ 12 M Το ςφντομο όνομα του μινα Jan, Aug n Ο αρικμόσ του μινα, χωρίσ μθδενικά μπροςτά O Η διαφορά από τθν ϊρα GMT 200 r s S Η μορφι τθσ θμερομθνίασ ςφμφωνα με το RFC-822 Τα δευτερόλεπτα τθσ ϊρασ με μθδενικά μπροςτά Το αγγλικό αρικμθτικό επίκεμα για τθν θμζρα του μινα 1 ζωσ 12 Sat, 22 Dec 1979 17:30 +0000 00 ζωσ 59 st, nd, rd ι th

t T Ο αρικμόσ των θμερϊν που ζχει ο μινασ Η ηϊνθ τθσ ϊρασ (time zone) για τον server 28 ζωσ 31 GMT, CET, EST U Η ςφραγίδα χρόνου (Unix Timestamp) 1056150334 w Ο αρικμόσ τθσ θμζρασ τθσ εβδομάδασ 0 (Sunday), 6 (Saturday) W Ο αρικμόσ τθσ εβδομάδασ του ζτουσ ςφμφωνα με το ISO-8601 y Το ζτοσ με δφο ψθφία 93, 07 Y Το ζτοσ με τζςςερα ψθφία 1993, 2007 z Η θμζρα του ζτουσ 0 to 366 Z Η διαφορά τθσ ηϊνθσ ϊρασ (time zone offset) ςε δευτερόλεπτα 30 (30 θ εβδομάδα του ζτουσ) -43200 to 43200 Όπωσ μποροφμε να δοφμε, υπάρχουν πολλζσ επιλογζσ διακζςιμεσ όταν κάνουμε μετατροπι από ζνα timestamp ςε θμερομθνία. Ακολουκοφν μερικά παραδείγματα με χαρακτιρεσ μορφοποίθςθσ θμερομθνιϊν : print date("h:i"). "\n"; print "Χθερ ήηαν : ". date("l", time() - 86400). "\n"; print "Το έηορ είναι : ". date("y"). "\n"; print date("js of F Y"). "\n"; print "Τα γενέθλιά μος είναι : " strtotime("01 Dec 2007")). " θέηορ.\n";. date("l", print date("\m\y b\i\\r\\t\h\d\a\y \i\s o\\n \a l \\t\h\i\s \ye\a\\r. ", strtotime("01 Dec 2007")). "\n"; Το αποτζλεςμα από τθν εκτζλεςθ του παραπάνω script κα είναι το εξισ : 01:31 Χθερ ήηαν : Saturday Το έηορ είναι : 2007

2nd of December 2007 Τα γενέθλιά μος είναι : Saturday θέηορ. My birthday is on a Saturday this year. Η πρϊτθ γραμμι είναι θ πιο βαςικι και απλά εμφανίηει τθν τρζχουςα ϊρα ςε 24ωρθ μορφι. Η δεφτερθ γραμμι είναι λίγο πιο πολφπλοκθ κακϊσ αναμειγνφει τθν ζξοδο τθσ ςυνάρτθςθσdate() μ ζνα κομμάτι κειμζνου ϊςτε να είναι πιο φυςικό το αποτζλεςμα. Κάτι ανάλογο ζχουμε και ςτθν τρίτθ γραμμι. Η τζταρτθ γραμμι εμφανίηει τθν θμερομθνία ςτθ μορφι "2nd of December 2007", όπου γράψαμε εμείσ τθ λζξθ "of". Η PHP δεν μπερδεφτθκε και αυτό γιατί το μικρό γράμμα o και το μικρό γράμμα f δεν χρθςιμοποιοφνται ςτθ μορφοποίθςθ θμερομθνιϊν τθσ ςυνάρτθςθσ date() και ζτςι εμφανίηονται ςτθν ζξοδο όπωσ ακριβϊσ είναι. Στθν πζμπτθ γραμμι ζχουμε ενϊςει τθν ζξοδο τθσ ςυνάρτθςθσ date() με δφο άλλα strings. Μποροφμε να γράψουμε τα strings και μζςα ςτθ ςυνάρτθςθ date(), όπωσ φαίνεται ςτθν ζκτθ γραμμι, αλλά αυτό είναι πολφ πιο πολφπλοκο. Στθν ζκτθ γραμμι βλζπουμε ότι ςυμπεριλάβαμε κείμενο μζςα ςτθ ςυνάρτθςθ date() αλλά αναγκαςτικαμε να χρθςιμοποιιςουμε τον χαρακτιρα \ για να μθν μπερδευτεί θ PHP και εκλάβει τα γράμματα ωσ εντολζσ μορφοποίθςθσ, όπωσ \M\y κλπ. Τα μικρά γράμματα b, o και e δεν χρθςιμοποιοφνται ςτισ εντολζσ μορφοποίθςθσ και ζτςι δεν χρειάηεται να χρθςιμοποιιςουμε τον χαρακτιρα \. Τα μικρά γράμματα r, t και n ζχουν ειδικι χριςθ ωσ χαρακτιρεσ διαφυγισ (carriage return, tab και new line αντίςτοιχα) και ζτςι αναγκαςτικαμε να χρθςιμοποιιςουμε δφο χαρακτιρεσ \\. Το ζνα backslash εμποδίηει τθν PHP από το να τα διαβάςει ωσ χαρακτιρεσ μορφοποίθςθσ θμερομθνιϊν και το άλλο εμποδίηει τθν PHP από το να τα εκλάβει ωσ χαρακτιρεσ διαφυγισ. Δημιουργία Ημερομηνιών από Συςτατικά int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]]) Αποτελεί κοινι τακτικι να αποκθκεφουμε το ζτοσ, τον μινα και τθν θμερομθνία ςε ξεχωριςτζσ μεταβλθτζσ ϊςτε να είναι πιο εφκολθ θ ςφγκριςθ και υπάρχει μια ειδικι ςυνάρτθςθ για να δθμιουργιςουμε ζνα timestamp ςτο Unix από τα ςυςτατικά μιασ θμερομθνίασ, θ mktime(). Η ςειρά αναγραφισ των ςυςτατικϊν τθσ θμερομθνίασ ωσ ορίςματα μζςα ςτθ ςυνάρτθςθ είναι θ εξισ : hour, minute, second, month, day, year, Is_Daylight_Savings_Time. Η ϊρα (hour) κα πρζπει να είναι γραμμζνθ ςε 24ωρθ μορφι.

Ζτςι, για να μεταβιβάςουμε τθν ϊρα 10:30pm τθσ 3 θσ Ιουνίου του 2007, κα πρζπει να χρθςιμοποιιςουμε τθ ςυνάρτθςθ mktime() ωσ εξισ : $unixtime = mktime(22, 30, 0, 6, 3, 2007, -1); Με τθν τελευταία παράμετρο, που εδϊ είναι το -1, λζμε ςτθν PHP αν κα είναι ενεργι θ κερινι ϊρα (DST, Daylight Savings Time). Η τιμι 1 κάνει τθ κερινι ϊρα να είναι ενεργι, θ τιμι 0 τθν κάνει ανενεργι και θ τιμι -1 αφινει τθν PHP να αποφαςίςει μόνθ τθσ. Με τθ ςυνάρτθςθ mktime() μποροφμε να κάνουμε και αρικμθτικζσ πράξεισ με θμερομθνίεσ, όπωσ για παράδειγμα αν προςκζςουμε ζναν μεγάλο αρικμό ςτθν τιμι του μινα, θ PHP κα δϊςει τθν κατάλλθλθ τιμι πρϊτα ςτο ζτοσ και μετά κα υπολογίςει τον μινα. Παρόμοια, αν προςκζςουμε τον αρικμό 9990 ςτθν τιμι τθσ ϊρασ, θ PHP κα πάει μπροςτά 416 θμζρεσ. Θα πρζπει να ζχουμε υπόψθ μασ ότι ςτθν PHP είναι επικίνδυνο να βάηουμε μθδενικά μπροςτά από τισ τιμζσ που είναι μικρότερεσ από το 10 (leading zero) και αυτό γιατί οι αρικμοί αυτοί εκλαμβάνονται από τθν PHP ωσ οκταδικοί (octal numbers). Οι Μαθηματικζσ Συναρτήςεισ Η PHP διακζτει πολλζσ μακθματικζσ ςυναρτιςεισ κακϊσ και αρκετζσ ςτακερζσ (constants) για τουσ δθμοφιλείσ αρικμοφσ ϊςτε να μθν είμαςτε αναγκαςμζνοι να τουσ υπολογίηουμε εμείσ. Όλεσ ςχεδόν οι μακθματικζσ ςυναρτιςεισ μποροφν να ομαδοποιθκοφν ςε τρεισ περιοχζσ : ςτρογγυλοποίθςθσ (rounding), δθμιουργίασ τυχαίων αρικμϊν (randomisation) και μετατροπισ (conversion), όπου και ανικουν οι περιςςότερεσ. Στρογγυλοποίηςη Αριθμών float ceil ( float value) float floor ( float value) float round ( float value [, int precision]) Επειδι ςυνικωσ κζλουμε λιγότερθ ακρίβεια απ αυτιν που μασ δίνει θ PHP, μποροφμε να χρθςιμοποιιςουμε τισ εξισ ςυναρτιςεισ ςτρογγυλοποίθςθσ : ceil(), floor() και round(). Ηceil() και θ floor() λαμβάνουν μία μόνο παράμετρο, τον αρικμό που κζλουμε να ςτρογγυλοποιιςουμε. Η ςυνάρτθςθ ceil() τον ςτρογγυλοποιεί ςτον πλθςιζςτερο ακζραιο που είναι μεγαλφτεροσ από τθν τιμι του αρικμοφ, ενϊ θ

ςυνάρτθςθ floor() τον ςτρογγυλοποιεί ςτον πλθςιζςτερο ακζραιο που είναι μικρότεροσ από τθν τιμι του αρικμοφ. Ακολουκεί ζνα παράδειγμα : $someval = 4.9; $ceiled = ceil($someval); $floored = floor($someval); Μετά από τθν εκτζλεςθ του παραπάνω κϊδικα, θ μεταβλθτι $ceiled κα είναι ίςθ με 5 και θ μεταβλθτι $floored κα είναι ίςθ με 4. Η ςυνάρτθςθ round() λαμβάνει δφο παραμζτρουσ, τον αρικμό που κζλουμε να ςτρογγυλοποιιςουμε και το πλικοσ των δεκαδικϊν ψθφίων που κζλουμε να υπάρχουν ςτον καινοφργιο αρικμό. Ακολουκεί ζνα παράδειγμα : $a = round(4.9); // 5 $b = round(4.5); // 5 $c = round(4.4999); // 4 $d = round(4.123456, 3); // 4.123 $e = round(4.12345, 4); // 4.1235 $f = round(1000 / 160); // 6 Όπωσ μποροφμε να δοφμε, το 4.5 ςτρογγυλοποιείται προσ τα πάνω ςτο 5, ενϊ το 4.4999 ςτρογγυλοποιείται προσ τα κάτω ςτο 4. Στθν τζταρτθ γραμμι βλζπουμε ότι χρθςιμοποιείται για πρϊτθ φορά και θ δεφτερθ παράμετροσ, με τθν οποία κακορίηουμε ςε πόςα δεκαδικά ψθφία κζλουμε να γίνει θ ςτρογγυλοποίθςθ. Στθν πζμπτθ γραμμι ζχουμε το αποτζλεςμα 4.1235 ςτθν ςτρογγυλοποίθςθ με τζςςερα δεκαδικά ψθφία και αυτό γιατί θ PHP κοιτάει το επόμενο ψθφίο για να αποφαςίςει αν κα αλλάξει τθν τιμι του τελευταίου ψθφίου. Αυτό ςθμαίνει, ότι αν ο αρικμόσ ιταν ο 4.12344, θ ςτρογγυλοποίθςθ με τζςςερα δεκαδικά ψθφία κα ζδινε τον αρικμό 4.1234, αλλά ςτθν προθγοφμενθ περίπτωςθ επειδι το πζμπτο ψθφίο είναι το 5, το οποίο ςτρογγυλοποιείται πάντα προσ τα

πάνω, ζχουμε το αποτζλεςμα 4.1235. Στο τελευταίο παράδειγμα, το $f, είναι μια ςυχνι κατάςταςθ που ςυναντάμε με τθ ςυνάρτθςθ round(). Για παράδειγμα, ασ υποκζςουμε ότι οργανϊνουμε ζνα ταξίδι και ζχουμε να μεταφζρουμε 1.000 άτομα. Θα πρζπει να υπολογίςουμε πόςα λεωφορεία κα χρειαςκεί να νοικιάςουμε, ζτςι διαιροφμε το 1.000 με το 160, που είναι θ χωρθτικότθτα του κάκε λεωφορείου, και μετά ςτρογγυλοποιοφμε το αποτζλεςμα και βλζπουμε ότι προκφπτει το 6. Το πρόβλθμα είναι ότι το πραγματικό αποτζλεςμα είναι τθσ διαίρεςθσ 1000/160 είναι το 6,25, δθλ. χρειαηόμαςτε 6 και κάτι λεωφορεία για να μεταφζρουμε τα 1.000 άτομα, δθλ. ςτθν πραγματικότθτα χρειαηόμαςτε 7 λεωφορεία. Για να επιλφςουμε προβλιματα όπωσ το προθγοφμενο, κα πρζπει να χρθςιμοποιοφμε τθ ςυνάρτθςθ ceil(). Και οι τρεισ ςυναρτιςεισ ςτρογγυλοποίθςθσ είναι χριςιμεσ για τθ δουλειά που προορίηονται, ζτςι κα πρζπει να τισ γνωρίηουμε και να τισ χρθςιμοποιοφμε όλεσ. Δημιουργία Τυχαίων Αριθμών int rand ( [int min, int max]) int mt_rand ( [int min, int max]) int getrandmax ( ) int mt_getrandmax ( ) void srand ( [int seed]) void mt_srand ( [int seed]) Υπάρχουν περιπτϊςεισ που χρειαηόμαςτε τυχαίουσ αρικμοφσ ςτον κϊδικά μασ, όπωσ για να δίνουμε ςτουσ επιςκζπτεσ του Web site ζναν διαφορετικό χαιρετιςμό κάκε φορά που επιςκζπτονται τθν ιςτοςελίδα μασ ι μπορεί να κζλουμε να δθμιουργιςουμε ζνα παιχνίδι με τυχαίουσ αρικμοφσ (κλιρωςθ). Η δθμιουργία τυχαίων αρικμϊν (randomisation) είναι μια απλι και χριςιμθ διαδικαςία και υπάρχουν δφο ςυναρτιςεισ γι αυτόν τον ςκοπό, θ rand() και θ mt_rand(). Και οι δφο αυτζσ ςυναρτιςεισ κάνουν τθν ίδια δουλειά και δζχονται τισ ίδιεσ παραμζτρουσ, αλλά θ μεν rand() είναι μια βαςικι ςυνάρτθςθ δθμιουργίασ τυχαίων αρικμϊν που είναι πολφ γριγορθ αλλά όχι και πολφ τυχαία, δθλ. οι αρικμοί που δθμιουργεί είναι λίγο προβλζψιμοι. Η ςυνάρτθςθ mt_rand() από τθν άλλθ πλευρά είναι πιο περίπλοκθ, όπου τα γράμματα mtςθμαίνουν Mersenne Twister, δθλ. το όνομα του αλγορίκμου παραγωγισ τυχαίων αρικμϊν που χρθςιμοποιεί. Η ςυνάρτθςθ αυτι επιςτρζφει κακαρά τυχαίουσ αρικμοφσ αλλά είναι πιο αργι. Και οι δφο ςυναρτιςεισ χρθςιμοποιοφν δφο προαιρετικζσ παραμζτρουσ (αρικμοφσ), που είναι ο ελάχιςτοσ και ο μζγιςτοσ αρικμόσ που μπορεί να επιςτραφεί.

Μποροφμε είτε να μθν δϊςουμε καμία παράμετρο, οπότε θ PHP κα επιςτρζψει ζναν τυχαίο αρικμό ανάμεςα ςτο 1 και ς ζναν πολφ μεγάλο αρικμό ι μποροφμε να δϊςουμε και τουσ δφο αρικμοφσ. Ακολουκεί ζνα παράδειγμα : $random = rand(); $randrange = rand(1, 10); $mtrandrange = mt_rand(1, 100); Θα πρζπει να ζχουμε υπόψθ μασ ότι και οι δφο αρικμοί που χρθςιμοποιοφνται ωσ παράμετροι είναι πικανό να επιςτραφοφν. Δθλαδι, ο αρικμόσ $randrange μπορεί να πάρει μια οποιαδιποτε τιμι ανάμεςα ςτο 1 και το 10, με το 1 και το 10 να είναι πικανά. Όπωσ είπαμε και νωρίτερα, αν δεν περάςουμε κάποια τιμι ωσ παράμετρο ςτισ ςυναρτιςεισ rand() και mt_rand(), θ PHP κα δθμιουργιςει ζναν τυχαίο αρικμό ανάμεςα ςτο 1 και ς ζναν πολφ μεγάλο αρικμό. Για να μάκουμε ποιοσ είναι αυτόσ ο μζγιςτοσ αρικμόσ, μποροφμε να χρθςιμοποιιςουμε τθ ςυνάρτθςθ getrandmax() ι τθν αντίςτοιχθ mt_getrandmax(). Θα δοφμε τϊρα ζνα παράδειγμα για το πϊσ μποροφμε να χρθςιμοποιιςουμε τθν παραγωγι τυχαίων αρικμϊν για να δθμιουργιςουμε διάφορουσ τυχαίουσ χαιρετιςμοφσ ςτουσ επιςκζπτεσ ενόσ Web site : switch(rand(1, 6)) { case 1: case 2: case 3: case 4: $greet = 'Γεια ζαρ!'; break; $greet = 'Καλυζήπθαηε!'; break; $greet = 'Χαιπεηιζμοί!'; break;

$greet = 'Καλή Πλοήγηζη!'; break; case 5: $greet = 'Καλημέπα!'; break; case 6: $greet = 'Yo!'; break; } print $greet; Θα πρζπει να ζχουμε υπόψθ μασ ότι θ ταχφτθτα τθσ δθμιουργίασ τυχαίων αρικμϊν δεν εξαρτάται από το μζγεκοσ των αρικμϊν που δίνουμε ωσ παραμζτρουσ ςτθ ςυνάρτθςθ, δθλ. θ rand() είναι το ίδιο γριγορθ με τθν rand(1, 3) αλλά και με τθν rand(1, 10000000). Οι περιςςότερεσ γεννιτριεσ τυχαίων αρικμϊν χρειάηονται ζναν ςπόρο (seed), δθλ. μια αρχικι τιμι κακϊσ οι αρικμοί που δθμιουργοφν δεν είναι ςτθν πραγματικότθτα τυχαίοι, αλλά ψευδο-τυχαίοι (pseudo-random). Η τιμι seed χρθςιμοποιείται για να παραχκεί ο πρϊτοσ αρικμόσ, μετά ο πρϊτοσ αρικμόσ χρθςιμοποιείται για να παραχκεί ο δεφτεροσ αρικμόσ, μετά ο δεφτεροσ για τον τρίτο κοκ, που ςθμαίνει ότι αν δίνουμε πάντα τθν ίδια τιμι seed κα λαμβάνουμε πάντα τθν ίδια ςειρά τυχαίων αρικμϊν. Αν τϊρα δϊςουμε ζναν τυχαίο αρικμό ωσ seed ςτθ γεννιτρια δθμιουργίασ τυχαίων αρικμϊν (random number generator), κα ζχουμε ωσ αποτζλεςμα μια κακαρι ςειρά τυχαίων αρικμϊν. Η ςυνάρτθςθ seed για τθν rand() είναι θ srand() και δζχεται μία παράμετρο, που είναι ζνασ ακζραιοσ αρικμόσ, για τθν τιμι seed. Αν χρθςιμοποιοφμε τθ ςυνάρτθςθ mt_rand(), κα πρζπει αντίςτοιχα να χρθςιμοποιιςουμε τθ ςυνάρτθςθ mt_srand(). Η ςυνάρτθςθ microtime(), που επιςτρζφει ωσ ζναν αρικμό κινθτισ υποδιαςτολισ τα εκατομμυριοςτά του δευτερολζπτου, αποτελεί μια πολφ καλι λφςθ δθμιουργίασ τυχαίου αρικμοφ για χριςθ ωσ παράμετρο seed, αρκεί να μετατραπεί το αποτζλεςμά τθσ ςε ακζραιο. Μποροφμε να μετατρζψουμε το αποτζλεςμα τθσ ςυνάρτθςθσ microtime() ςε ακζραιο, πολλαπλαςιάηοντασ το με το ζνα εκατομμφριο (10 6 ), ωσ εξισ : srand((double)microtime()*1000000); mt_srand((double)microtime()*1000000 ); Αν κζλουμε τϊρα να δθμιουργείται πάντα θ ίδια ςειρά τυχαίων αρικμϊν, κα πρζπει να δίνουμε τθν ίδια τιμι seed. Για παράδειγμα, ανεξάρτθτα από το πόςεσ φορζσ κα το τρζξουμε, το επόμενο script δθμιουργεί πάντα τουσ ίδιουσ τυχαίουσ αρικμοφσ :

mt_srand(123456); echo mt_rand(1, 100), "\n"; echo mt_rand(1, 100), "\n"; echo mt_rand(1, 100), "\n"; Οι Τριγωνομετρικζσ Συναρτήςεισ float sin ( float value) float cos ( float value) float tan ( float value) float asin ( float value) float acos ( float value) float atan ( float value) float deg2rad ( float value) float rad2deg ( float value) Για να υπολογίςουμε τουσ βαςικοφσ τριγωνομετρικοφσ αρικμοφσ του θμιτόνου (sine), ςυνθμίτονου (cosine) και εφαπτομζνθσ (tangent) μποροφμε να καλζςουμε τισ ςυναρτιςεισ sin(),cos() και tan(), ενϊ για να υπολογίςουμε το τόξο θμιτόνου (arc sine), το τόξο ςυνθμίτονου (arc cosine) και το τόξο εφαπτομζνθσ (arc tangent) μποροφμε να καλζςουμε τισ ςυναρτιςεισasin(), acos() και atan(). Και οι ζξι αυτζσ ςυναρτιςεισ δζχονται μία μόνο παράμετρο, ςυγκεκριμζνα οι τρεισ πρϊτεσ τθν τιμι τθσ γωνίασ ςε ακτίνια (radians) και οι τρεισ τελευταίεσ λαμβάνουν το αποτζλεςμα από τισ τρεισ πρϊτεσ για να επιςτρζψουν τον αρικμό των ακτινίων (radians). Για να υπολογίςουμε τθν τιμι μιασ γωνίασ ςε ακτίνια (radians) πρζπει να πολλαπλαςιάςουμε τθν τιμι τθσ ςε μοίρεσ (degrees) με τθν ςτακερά π και μετά να διαιρζςουμε με το 180. ΗPHP διακζτει τθ ςυνάρτθςθ deg2rad(), που μποροφμε να καλζςουμε για να κάνουμε τθ μετατροπι τθσ τιμισ μιασ γωνίασ από μοίρεσ ςε ακτίνια.

Ακολουκοφν μερικά παραδείγματα χριςθσ των παραπάνω ςυναρτιςεων : $sin1 = sin(10); $sin2 = sin(deg2rad(80)); $cos1 = cos(89); $cos2 = cos(deg2rad(9)); Αν εφαρμόςουμε τθ ςυνάρτθςθ atan() ς ζναν αρικμό και μετά εφαρμόςουμε τθ ςυνάρτθςθ tan() ςτο αποτζλεςμα που κα παραχκεί, κα επανζλκουμε ςτον αρχικό αρικμό. Ακολουκεί ζνα παράδειγμα : $sin1 = sin(deg2rad(80)); $asin1 = rad2deg(asin($sin1)); Στον παραπάνω κϊδικα, θ μεταβλθτι $asin1 κα ζχει τθν τιμι 80. Όπωσ μποροφμε να φανταςτοφμε, θ ςυνάρτθςθ rad2deg() είναι θ αντίςτροφθ τθσ ςυνάρτθςθσ deg2rad(), δθλ. μετατρζπει τθν τιμι μιασ γωνίασ από ακτίνια (radians) ςε μοίρεσ (degrees). Άλλεσ Μαθηματικζσ Συναρτήςεισ Μετατροπήσ number abs ( number value) float sqrt ( float value) number pow ( number base, number exponent) float hypot ( float num1, float num2) Υπάρχουν αρκετζσ μακθματικζσ ςυναρτιςεισ μετατροπισ αρικμϊν, από τισ οποίεσ οι ςθμαντικότερεσ είναι οι abs(), sqrt() και pow(). Η ςυνάρτθςθ abs() επιςτρζφει τθν απόλυτθ τιμι (absolute value) τθσ παραμζτρου που τθσ μεταβιβάηουμε.

Ακολουκεί ζνα παράδειγμα : abs(10); abs(-14); Η πρϊτθ γραμμι επιςτρζφει τθν τιμι 10 και θ δεφτερθ γραμμι τθν τιμι 14. Η ςυνάρτθςθ abs() μπορεί να δεχκεί ακεραίουσ (integers) ι και πραγματικοφσ αρικμοφσ (floats) ωσ παράμετρο και επιςτρζφει τον ίδιο τφπο : abs(10.1); abs(-14.5); Η πρϊτθ γραμμι επιςτρζφει τθν τιμι 10.1 και θ δεφτερθ γραμμι τθν τιμι 14.5. Η ςυνάρτθςθ sqrt() υπολογίηει τθν τετραγωνικι ρίηα (square root) ενόσ κετικοφ αρικμοφ : print sqrt(25); print sqrt(26); Η πρϊτθ γραμμι κα επιςτρζψει τθν τιμι 5 και θ δεφτερθ γραμμι τθν τιμι 5.0990195135928. Θα πρζπει να ζχουμε υπόψθ μασ ότι θ κλιςθ τθσ ςυνάρτθςθσ sqrt() κακυςτερεί τθν εκτζλεςθ του προγράμματοσ, ζτςι κα πρζπει να αποφεφγουμε τισ πολλαπλζσ κλιςεισ τθσ. Τζλοσ, θ ςυνάρτθςθ pow() δζχεται δφο παραμζτρουσ, μια βάςθ (base) και μια δφναμθ (power) ςτθν οποία κα υψωκεί θ βάςθ. Ακολουκοφν παραδείγματα : print pow(10, 2); // 100 print pow(10, 3); // 1000

print pow(10, 4); // 10000 print pow(-10, 4); // 10000 Οι τρεισ πρϊτεσ γραμμζσ δείχνουν το αποτζλεςμα των πολλαπλαςιαςμϊν 10 * 10, 10 * 10 * 10 και 10 * 10 * 10 * 10. Στθν τζταρτθ γραμμι ζχουμε ωσ βάςθ (πρϊτθ παράμετροσ) το -10, κάτι που θ ςυνάρτθςθ pow() το δζχεται. Η ςυνάρτθςθ pow() δζχεται ακόμθ και αρνθτικζσ δυνάμεισ για τθ δεφτερθ παράμετρο, οπότε δεν παράγει αρνθτικοφσ αλλά μικροφσ αρικμοφσ. Για παράδειγμα, θ εντολι pow(10, -1) ζχει ωσ αποτζλεςμα το 0.1, θ pow(10, -2) το 0.01, θ pow(10, -3) το 0.001 κοκ. Υπάρχει και θ ςυνάρτθςθ hypot(), θ οποία λαμβάνει δφο παραμζτρουσ, X και Y, και επιςτρζφει τθν τιμι sqrt((x * X) + (Y * Y)), δθλ. το μικοσ ενόσ διανφςματοσ ι τθν υποτείνουςα (hypotenuse) ενόσ ορκογωνίου τριγϊνου. Μετατροπή Αριθμών ςε Άλλα Συςτήματα Αρίθμηςησ int bindec ( string binary_string) string decbin ( int number) string dechex ( int number) string decoct ( int number) int hexdec ( string hex_string) int octdec ( string octal_string) string base_convert ( string number, int from_base, int to_base) Μποροφμε να αλλάξουμε τθ βάςθ (base) του ςυςτιματοσ αρίκμθςθσ που χρθςιμοποιοφμε, όπωσ είναι το δεκαδικό ςφςτθμα αρίκμθςθσ όπου θ βάςθ είναι το 10. Σ ζνα ςφςτθμα αρίκμθςθσ που ζχει ωσ βάςθ το b, χρθςιμοποιοφμε τα ψθφία 0, 1,..., b-1 για να ςχθματίςουμε όλουσ τουσ δυνατοφσ αρικμοφσ του ςυςτιματοσ. Στο δεκαδικό ςφςτθμα (με βάςθ το 10) χρθςιμοποιοφμε ωσ ψθφία τουσ αρικμοφσ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 και ςτο οκταδικό ςφςτθμα (με βάςθ το 8) χρθςιμοποιοφμε ωσ ψθφία τουσ αρικμοφσ 0, 1, 2, 3, 4, 5, 6, 7. Τρία είναι τα ςυςτιματα αρίκμθςθσ, εκτόσ του δεκαδικοφ, που είναι δθμοφιλι ς όςουσ αςχολοφνται με τουσ υπολογιςτζσ, το δυαδικό (binary) με βάςθ το 2, το οκταδικό (octal) με βάςθ το 8 και το δεκαεξαδικό (hexadeci-mal) με βάςθ το 16. Στο

δυαδικό ςφςτθμα ζχουμε μόνο δφο ψθφία, το 0 και το 1, ενϊ ςτο δεκαεξαδικό ςφςτθμα ζχουμε 16 ψθφία, που είναι τα γνωςτά μασ 0-9 αλλά και τα A (10), B (11), C (12), D (13), E (14) και F (15). Για παράδειγμα, ασ δοφμε τον δεκαδικό αρικμό 39 ςε τζςςερα διαφορετικά ςυςτιματα αρίκμθςθσ : 100111 (δυαδικό binary) 47 (οκταδικό octal) 39 (δεκαδικό decimal) 27 (δεκαεξαδικό hexadecimal) Για να μετατρζψουμε τον δεκαεξαδικό αρικμό 27 ςε δεκαδικό, πολλαπλαςιάηουμε το ψθφίο 2 του αρικμοφ με το 16 και προςκζτουμε το 7, οπότε ζχουμε το 39. Αν ο δεκαεξαδικόσ αρικμόσ ιταν ο 2F8, κα ζπρεπε να πολλαπλαςιάςουμε το ψθφίο 2 με το 256 (256 = 16 * 16), το ψθφίο F με το 16 και να προςκζςουμε το 8, οπότε ζχουμε τον δεκαδικό αρικμό 760. Αν όλα αυτά μασ φαίνονται παράξενα, δεν κα πρζπει να ξεχνάμε ότι και ςτο δεκαδικό ςφςτθμα αρίκμθςθσ με το οποίο είμαςτε εξοικειωμζνοι, ο αρικμόσ 569 για παράδειγμα, προκφπτει αν πολλαπλαςιάςουμε το 5 με το 100 (100 = 10 * 10), μετά το 6 με το 10 και προςκζτουμε και το 9. Για τθ μετατροπι από το ζνα ςφςτθμα αρίκμθςθσ ςτο άλλο, θ PHP διακζτει αρκετζσ ςυναρτιςεισ : bindec(), decbin(), dechex(), decoct(), hexdec() και octdec(). Η δουλειά που κάνει θ κάκε ςυνάρτθςθ προκφπτει από τθν ονομαςία τθσ, όπωσ για παράδειγμα θ bindec() που μετατρζπει ζναν δυαδικό bin(ary) ςε δεκαδικό dec(imal) και θ dechex() που μετατρζπει ζναν δεκαδικό dec(imal) ςε δεκαεξαδικό hex(adecimal). Η κάκε ςυνάρτθςθ δζχεται μία μόνο παράμετρο, που είναι ο αρικμόσ που κα μετατραπεί ςτο νζο ςφςτθμα αρίκμθςθσ, όπωσ για παράδειγμα : print decbin(16); // 10000 print dechex(232); // e8 print hexdec(e8); // 232 Βλζπουμε ότι όλεσ οι παραπάνω ςυναρτιςεισ μετατρζπουν από ι προσ το δεκαδικό ςφςτθμα ς ζνα άλλο ςφςτθμα αρίκμθςθσ. Η PHP διακζτει και τθν πολφ χριςιμθ ςυνάρτθςθ base_convert() για να μποροφμε να κάνουμε μετατροπι ενόσ αρικμοφ από ζνα ςφςτθμα αρίκμθςθσ ς ζνα άλλο. Η ςυνάρτθςθ αυτι δζχεται τρεισ παραμζτρουσ, που είναι με τθ ςειρά ο αρικμόσ που κζλουμε να μετατρζψουμε, θ βάςθ του ςυςτιματοσ από το οποίο κα γίνει θ μετατροπι και θ βάςθ του ςυςτιματοσ προσ το οποίο κα γίνει θ μετατροπι.

Για παράδειγμα, οι επόμενεσ δφο εντολζσ είναι ιςοδφναμεσ : print decbin(16); print base_convert(16, 10, 2); Η δεφτερθ εντολι μετατρζπει τον αρικμό 16 από το δεκαδικό ςτο δυαδικό ςφςτθμα. Το μεγάλο πλεονζκτθμα τθσ ςυνάρτθςθσ base_convert() είναι ότι μποροφμε να μετατρζψουμε ζναν δυαδικό αρικμό απευκείασ ςε δεκαεξαδικό ι και να κάνουμε πιο περίεργουσ ςυνδυαςμοφσ, όπωσ μετατροπι ενόσ αρικμοφ από το οκταδικό ςτο ςφςτθμα με βάςθ το 12 (duodecimal) ι από το δεκαεξαδικό ςτο ςφςτθμα με βάςθ το 20 (vigesimal). Κάτι που ζχουμε ιδθ διαπιςτϊςει είναι ότι τα ψθφία πάνω από το 9 παριςτάνονται με γράμματα του λατινικοφ αλφαβιτου. Ζτςι, ςτο δεκαεξαδικό ςφςτθμα αρίκμθςθσ ζχουμε τα ψθφία 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E και F, ενϊ ςτο ςφςτθμα αρίκμθςθσ με βάςθ το 20 (vigesimal), ζχουμε τα ψθφία 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I και J. Με δεδομζνο το ότι υπάρχουν 10 αρικμθτικά ψθφία από το 0 ζωσ και το 9 και 26 γράμματα από το A ζωσ και το Z, θ μζγιςτθ βάςθ ςυςτιματοσ αρίκμθςθσ που μπορεί να υποςτθρίξει θphp είναι το 36. Ακολουκοφν μερικά ακόμα παραδείγματα χριςθσ τθσ ςυνάρτθςθσ base_convert() : print base_convert(556, 10, 2); // 1000101100 print base_convert(556, 10, 8); // 1054 print base_convert(556, 10, 20); // 17g print base_convert(556, 10, 36); // fg Όπωσ βλζπουμε, όςο μεγαλφτερθ είναι θ βάςθ του ςυςτιματοσ αρίκμθςθσ, τόςο πιο ςφντομοσ είναι ο αρικμόσ που προκφπτει. Οι Μαθηματικζσ Σταθερζσ

Η PHP διακζτει μερικζσ ενςωματωμζνεσ μακθματικζσ ςτακερζσ, όπωσ είναι ο γνωςτόσ αρικμόσ π (Pi), για τον οποίο υπάρχει θ ςτακερά M_PI. Για παράδειγμα, για να υπολογίςουμε το εμβαδόν ενόσ κφκλου με βάςθ τθν ακτίνα του r, ο τφποσ είναι a = pi * r 2. Στθν PHP μποροφμε να γράψουμε τον εξισ κϊδικα : $area = M_PI * ($radius * $radius); // ή $area = M_PI * pow($radius, 2); Ακολουκεί μια λίςτα με τισ πιο χριςιμεσ μακθματικζσ ςτακερζσ που διακζτει θ PHP : Σταθερά Τιμή Σημαςία M_PI 3.14159265358979323846 Pi M_PI_2 1.57079632679489661923 Pi/2 M_PI_4 0.78539816339744830962 Pi/4 M_1_PI 0.31830988618379067154 1/Pi M_2_PI 0.63661977236758134308 2/Pi M_SQRTPI 1.77245385090551602729 sqrt(m_pi) M_2_SQRTPI 1.12837916709551257390 2/sqrt(M_PI) M_SQRT2 1.41421356237309504880 sqrt(2) M_SQRT3 1.73205080756887729352 sqrt(3) M_SQRT1_2 0.70710678118654752440 1/sqrt(2)