Ένα string είναι μια σειρά χαρακτήρων. Στην PHP, ένας χαρακτήρας είανι το ίδιο με ένα byte, δηλαδή, υπάρχουν ακριβώς 256 διαφορετικοί πιθανοί χαρακτήρες. Αυτό επίσης σημαίνει ότι η PHP δεν υποστηρίζει Unicode. Δείτε την utf8_encode() και την utf8_decode() σχετικά με υποστήριξη Unicode.
Óçìåßùóç: Δεν υπάρχει πρόβλημα για ένα string να γίνει πολύ μεγάλο. Δεν υπάρχει πρακτικά κάποιο όριο για το μέγεθος των strings που να επιβάλλει η PHP, συνεπώς δεν υπάρχει λόγος να ανησυχείτε για μεγάλα strings.
Ένα λεκτικό string μπορεί να προσδιοριστεί με τρεις διαφορετικούς τρόπους.
Ο ευκολότερος τρόπος για να ορίσετε ένα απλό string είναι να το βάλετε μέσα σε μονά εισαγωγικά (δηλαδή στον χαρακτήρα ').
Για να ορίσετε ένα απλό εισαγωγικό, θα χρειαστεί να προσθέσετε ένα backslash (\), όπως και σε πολλές άλλες γλώσσες. Αν το backslash πρέπει να εμφανιστεί πριν από ένα απλό εισαγωγικό ή στο τέλος του string, θα χρειαστεί να το διπλασιάσετε. Σημειώστε ότι αν προσπαθήσετε να αποφύγετε (escape) οποιονδήποτε άλλο χαρακτήρα, το backslash θα τυπωθεί! Συνήθως δεν υπάρχει ανάγκη να θέλουμε να αποφύγουμε (escape) την εμφάνιση του ίδιου του backslash.
Óçìåßùóç: Στην PHP 3, όταν συμβαίνει αυτό θα εμφανιστεί μια προειδοποίηση στο επίπεδο E_NOTICE .
Óçìåßùóç: Σε αντίθεση με τις δύο άλλες συντάξεις, οι μεταβλητές και οι ακολουθίες από escape για ειδικούς χαρακτήρες δεν θα επεκταθεί όταν εμφανίζονται σε strings που ορίζονται από απλά εισαγωγικά.
<?php |
Αν το string περικλείεται σε διπλά εισαγωγικά ("), η PHP καταλαβαίνει περισσότερες ακολουθίες από escape (escape sequences) για ειδικούς χαρακτήρες:
Ðßíáêáò 11-1. Χαρακτήρες που εξαιρούνται (Escaped characters)
sequence | meaning |
---|---|
\n | linefeed (LF or 0x0A (10) in ASCII) |
\r | carriage return (CR or 0x0D (13) in ASCII) |
\t | horizontal tab (HT or 0x09 (9) in ASCII) |
\\ | backslash |
\$ | dollar sign |
\" | double-quote |
\[0-7]{1,3} | η ακολουθία των χαρακτήρων που ταιριάζουν στην κανονική έκφραση είναι ένας χαρακτήρας στο οχταδικό σύστημα |
\x[0-9A-Fa-f]{1,2} | η ακολουθία των χαρακτήρων που ταιριάζουν στην κανονική έκφραση είναι ένας χαρακτήρας στο δεκαεξαδικό σύστημα |
Επαναλαμβάνουμε ότι αν προσπαθήσετε να αποφύγετε (escape) οποιοδήποτε άλλο χαρακτήρα, το backslash θα τυπωθεί!
Αλλά το πιο σημαντικό χαρακτηριστικό των strings που ορίζονται σε διπλά εισαγωγικά είναι το γεγονός ότι τα ονόματα των μεταβλητών θα επεκταθούν. Δείτε το string parsing για λεπτομέρειες.
Ένας άλλος τρόπος για να ορίσουμε strings είναι χρησιμοποιώντας τη σύνταξη heredoc ("<<<"). Θα πρέπει να προσθέσουμε έναν identifier μετά τα <<<, στη συνέχεια το string, και μετά τον ίδιο identifier για να κλείσουμε την αναφορά.
Ο identifier κλεισίματος πρέπει να αρχίζει στην πρώτη στήλη της γραμμής. Επίσης, ο identifier που χρησιμοποιείται πρέπει να ακολουθεί τους ίδιους κανόνες ονοματολογίας όπως και οποιοδήποτε άλλο label στην PHP: πρέπει να περιέχει μόνο αλφαριθμητικούς χαρακτήρες και underscores, και πρέπει να αρχίζει με ένα μη αριθμητικό χαρακτήρα ή underscore.
Ðñïåéäïðïßçóç |
Είναι πολύ σημαντικό να σημειώσουμε ότι η γραμμή με τον identifier κλεισίματος δεν περιέχει άλλους χαρακτήρες, εκτός ίσως από ένα ελληνικό ερωτηματικό (;). Αυτό σημαίνει ιδιαίτερα ότι ο identifier μπορεί να μην βρίσκεται σε εσοχή (quote), και μπορεί να μην υπάρχουν spaces ή tabs μετά ή πριν το ελληνικό ερωτηματικό. Είναι επίσης σημαντικό να συνειδητοποιήσετε ότι ο πρώτος χαρακτήρας πριν τον identifier κλεισίματος πρέπει να είναι μια καινούρια γραμμή (newline) όπως αυτή ορίζεται από το λειτουργικό σας σύστημα. Αυτό είναι το \r στο Macintosh για παράδειγμα. Αν αυτός ο κανόνας δεν τηρείται και ο identifier κλεισίματος δεν είναι "ξεκάθαρος" τότε δεν θεωρείται ότι είναι identifier κλεισίματος και η PHP θα συνεχίσει να ψάχνει για έναν τέτοιο. Αν σ'αυτή την περίπτωση ένας κατάλληλος identifier κλεισίματος δεν βρεθεί τότε ένα parse error θα εμφανιστεί με τον αριθμό της γραμμής που τελειώνει το script. |
Το Heredoc text συμπεριφέρεται ακριβώς όπως το double-quoted string, χωρίς όμως τα double-quotes. Αυτό σημαίνει πως δεν χρειάζεται να προσπαθείτε να κάνετε escape quotes στα έγγραφα σας εδώ, αλλά μπορείτε να χρησιμοποιείτε τους κώδικες για escape που αναφέρθηκαν παραπάνω. Οι μεταβλητές επεκτείνονται, αλλά η ίδια προσοχή πρέπει να δίνεται όταν εκφράζουμε σύνθετες μεταβλητές μέσα σε ένα τέτοιο έγγραφο όπως και με τα strings.
Óçìåßùóç: Η υποστήριξη Heredoc προστέθηκε στην PHP 4.
Όταν ένα string ορίζεται σε double quotes ή με heredoc, οι μεταβλητές μεταγλωττίζονται μέσα σ'αυτό.
Υπάρχουν δυο τρόποι σύνταξης, ο απλός και ο σύνθετος . Ο απλός τρόπος σύνταξης είναι ο πιο κοινός και βολικός, παρέχει έναν τρόπο για μεταγλώττιση μεταβλητής, μιας τιμής ενός array, ή μια ιδιότητας αντικειμένου.
Ο σύνθετος τρόπος σύνταξης εισήχθη στην PHP 4, και μπορεί να αναγνωριστεί από τα curly braces (άγκιστρα) που περιβάλουν την έκφραση.
Αν το σύμβολο του δολαρίου ($) εμφανιστεί, ο parser (μεταγλωττιστής) θα πάρει όσο πιο πολλά tokens μπορεί για να σχηματίσει ένα έγκυρο όνομα μεταβλητής. Βάλτε το όνομα της μεταβλητής σε curly braces αν θέλετε να καθορίσετε ρητά το τέλος του ονόματος.
<?php |
Ομοιώς, μπορείτε να έχετε ένα array index ή μία ιδιότητα αντικειμένου για μεταγλώττιση. Στα ευρετήρια πινάκων, η αγκύλη κλεισίματος (]) ορίζει το τέλος του ευρετηρίου. Για τις ιδιότητες αντικειμένων οι ίδιοι κανόνες εφαρμόζονται όπως και στις απλές μεταβλητές, ενώ με τις ιδιότητες αντικειμένων δεν υπάρχει τέτοιο trick όπως αυτό με τις μεταβλητές.
<?php |
Για κάτι πιο πολύπλοκο, θα πρέπει να χρησιμοποιείτε τη σύνθετη σύνταξη.
Η σύνταξη αυτή δεν καλείται σύνθετη επειδή είναι η ίδια σύνθετη, αλλά επειδή μπορείτε να συμπεριλάβετε σύνθετες εκφράσεις με αυτόν τον τρόπο.
Στην πραγματικότητα, μπορείτε να συμπεριλάβετε οποιαδήποτε τιμή υπάρχει στο namespace των strings με αυτή τη σύνταξη. Απλά γράφετε την έκφραση με τον ίδιο τρόπο που θα τη γράφατε έξω από το string, και στη συνέχεια να την συμπεριλάβετε στα { και }. Αφού δεν μπορείτε να κάνετε escape στο '{', αυτή η σύνταξη θα αναγνωρίζεται μόνο όταν το $ ακολουθεί αμέσως το {. (Χρησιμοποιείστε το "{\$" ή το "\{$" για να πάρετε το λεκτικό "{$"). Μερικά παραδείγματα για να το κάνουν πιο ξεκάθαρο:
<?php |
Οι χαρακτήρες μέσα σε strings μπορούν να προσπελαστούν ορίζοντας το zero-based offset του επιθυμητού χαρακτήρα μετά το string σε curly braces.
Óçìåßùóç: Για προς τα πίσω συμβατότητα, μπορείτε ακόμη να χρησιμοποιείτε array-braces για τον ίδιο σκοπό. Πάντως, αυτή η σύνταξη δεν συνίσταται στην PHP 4.
Τα strings μπορούν να συννενωθούν χρησιμοποιώντας τον τελεστή '.' (τελεία). Σημειώστε ότι ο '+' (συν) τελεστής δε θα δουλέψει σ'αυτή την περίπτωση. Παρακαλώ δείτε το Τελεστές για Strings για περισσότερες πληροφορίες.
Υπάρχουν πολλές χρήσιμες συναρτήσεις για αλλαγές στα strings.
Δείτε το τμήμα για συναρτήσεις των strings για γενικές συναρτήσεις, τις συναρτήσεις κανονικών εκφράσεων για προχωρημένη αναζήτηση&αντικατάσταση (σε δυο εκδόσεις: Perl και POSIX extended).
Υπάρχουν επίσης συναρτήσεις για URL-strings, και συναρτήσεις για κρυπτογράφηση/αποκρυπτογράφηση strings (mcrypt και mhash).
Τέλος, αν ακόμη δεν βρήκατε αυτό που ψάχνατε, δείτε επίσης τις συναρτήσεις για τύπους χαρακτήρων.
Μπορείτε να μετατρέψετε μια τιμή σε string χρησιμοποιώντας την (string) cast (μεατροπή), ή τη συνάρτηση strval(). Η μετρατοπή σε String γίνεται αυτόματα για σας στην εμβέλεια της έκφρασης όταν απαιτείται ένα string. Αυτό συμβαίνει όταν χρησιμοποιείτε τις echo() ή print() συναρτήσεις, ή όταν συγκρίνετε μια μεταβλητή τιμή με ένα string. Διαβάστε στο manual τα τμήματα σχετικά με Τύπους και Type Juggling για να καταλάβετε καλύτερα. Δείτε επίσης settype().
Μια boolean TRUE τιμή μετατρέπεται στο string "1", ενώ η FALSE τιμή αναπαρίσταται από το "" (κενό string). Μ'αυτόν τον τρόπο μπορείτε να μετατρέψετε τις τιμές από boolean σε string και αντιστρόφως.
Ένας integer ή ένας αριθμός κινητής υποδιαστολής (float) όταν μετατρέπεται string αναπαρίσταται από τον αριθμό με τα ψηφία του (συμπεριλαμβάνεται το μέρος του εκθέτη για τους αριθμούς κινητής υποδιαστολής).
Οι Arrays μετατρέπονται πάντα στο string "Array", έτσι δεν μπορείτε να εμφανίσετε το περιεχόμενο ενός array με την echo() ή την print() για να δείτε τι υπάρχει μέσα σ'αυτούς. Για να δείτε ένα στοιχείο, θα κάνετε κάτι όπως echo $arr['foo']. Δείτε παρακάτω για tips σχετικά με την εμφάνιση ολόκληρου του περιεχομένου.
Τα Objects μετατρέπονται πάντα στο string "Object". Αν θέλετε να εκτυπώσετε τη τιμή ενός μέλους της μεταβλητής ενός object για λόγους debugging, διαβάστε τις παρακάτω παραγράφους. Αν θέλετε να βρείτε το όνομα της κλάσης της οποίας ένα object είναι στιγμιότυπο (instance), χρησιμοποιείστε την get_class().
Τα Resources πάντα μετατρέπονται σε strings με τη δομή "Resource id #1" όπου το 1 είναι ο μοναδικός αριθμός του resource που ανατίθεται από την PHP κατά τη διάρκεια της εκτέλεσης. Αν θέλετε να πάρετε τον τύπο του resource, χρησιμοποιείστε την get_resource_type().
Το NULL μετατρέπεται πάντα σε κενό string.
Όπως μπορείτε να δείτε παραπάνω, η εκτύπωση των arrays, των objects ή των resources δεν σας παρέχει χρήσιμες πληροφορίες σχετικά τις ίδιες τις τιμές. Δείτε τις συναρτήσεις print_r() και var_dump() για καλύτερους τρόπους εμφάνισης των τιμών για το debugging.
Μπορείτε επίσης να μετατρέψετε τις τιμές της PHP σε strings και να τις αποθηκεύσετε μόνιμα. Αυτή η μέθοδος ονομάζεται serialization, και μπορεί να γίνει με τη συνάρτηση serialize(). Μπορείτε επίσης να κάνετε serialize τις PHP values σε XML δομές, αν έχετε προσθέσει υποστήριξη για WDDX κατά τη διάρκεια του setup της PHP.
Όταν ένα string υπολογίζεται σαν αριθμητική τιμή, η τιμή που προκύπτει και ο τύπος της ορίζονται ως ακολούθως.
Το string θα υπολογιστεί ως float αν περιέχει οποιοδήποτε από τους χαρακτήρες '.', 'e', or 'E'. Διαφορετικά, θα υπολογιστεί ως ακέραιος.
Η τιμή δίνεται από το αρχικό μέρος του string. Αν το string αρχίζει με ένα έγκυρο αριθμητικό δεδομένο, αυτή θα είναι και η τιμή που θα χρησιμοποιηθεί. Διαφορετικά, η τιμή θα είναι 0 (μηδέν). Τα έγκυρα αριθμητικά δεδομένα είναι ένα προαιρετικό σύμβολο, ακολουθούμενο από ένα ή περισσότερα ψηφία (προαιρετικά περιλαμβάνουν ένα δεκαδικό σημείο), ακολουθούμενο από ένα προαιρετικό εκθετικό. Το εκθετικό είναι το 'e' ή το 'E' ακολουθούμενο από ένα ή περισσότερα ψηφία.
<?php |
Για περισσότερες πληροφορίες σχετικά με αυτή τη μετατροπή, δείτε το manual του Unix στη σελίδα για strtod(3).
Αν θέλετε να ελένξετε κάποιο από τα παραδείγματα σ'αυτό το τμήμα, μπορείτε να κάνετε cut και paste στα παραδείγματα και να εισάγετε την ακόλουθη γραμμή για να δείτε μόνοι σας τι συμβαίνει:
Μην περιμένετε να πάρετε τον κώδικα από έναν χαρακτήρα απλά μετατρέποντας τον σε ακέραιο (όπως θα κάνατε στη C για παράδειγμα). Χρησιμοποιήστε τις συναρτήσεις ord() και chr() για μετατροπές ανάμεσα σε charcodes και characters.