Σταθερές
Table of Contents
Μια σταθερά είναι ένας identifier (όνομα) για μια απλή τιμή. Όπως φαίνεται και από το όνομα, αυτή η τιμή δεν μπορεί να αλλάξει κατά την εκτέλεση του script. (Οι 'μαγικές σταθερές' __FILE__ και __LINE__ φαίνεται να είναι εξαίρεση σ'αυτόν τον κανόνα, αλλά δεν είναι πραγματικές σταθερές.) Είναι προκαθορισμένο πως μια σταθερά είναι case-sensitive. Κατά συνθήκη οι constant identifiers είναι πάντα στα κεφαλαία.
Το όνομα μιας σταθεράς ακολουθεί τους ίδιους κανόνες όπως και οποιαδήποτε ετικέτα (label) στην PHP. Ένα έγκυρο όνομα σταθεράς αρχίζει με ένα γράμμα ή underscore, ακολουθούμενο από οποιονδήποτε αριθμό γραμμάτων, αριθμών ή underscore. Ως regular expression, θα εκφραζόταν ως εξής: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Note: Για τους σκοπούς μας εδώ, ένα γράμμα είναι από το a-z, A-Z, και οι ASCII χαρακτήρες από το 127 μέχρι το 255 (0x7f-0xff).
Όπως οι superglobals, η εμβέλεια (scope) μιας σταθεράς είναι global. Μπορείτε να έχετε πρόσβαση σ' αυτή από οποιοδήποτε μέρος στο script χωρίς να λαμβάνετε υπόψη την εμβέλεια. Για περισσότερες πληροφορίες σχετικά με την εμβέλεια, διαβάστε το τμήμα του manual σχετικά με την εμβέλεια των μεταβλητών.
Σύνταξη
Μπορείτε να ορίσετε μια σταθερά χρησιμοποιώντας την define()-συνάρτηση. Μόλις μια σταθερά οριστεί, δεν μπορεί ποτέ να αλλάξει ή να μην είναι ορισμένη.
Μόνο scalar (βαθμωτά) δεδομένα (boolean, integer, float και string) μπορούν να συμπεριλαμβάνονται στις σταθερές.
Μπορείτε να πάρετε την τιμή μιας σταθεράς απλά καλώντας την με το όνομα της. Σε αντίθεση με τις μεταβλητές, δεν θα πρέπει να βάζετε μπροστά από μια σταθερά το $. Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση constant(), για να διαβάσετε την τιμή μιας σταθεράς, αν θέλετε να πάρετε το όνομα μιας σταθεράς δυναμικά. Χρησιμοποιείστε την get_defined_constants() για να πάρετε μια λίστα όλων των σταθερών που έχουν οριστεί.
Note: Οι σταθερές και οι (global) μεταβλητές είναι σε διαφορετικό namespace. Αυτό σημαίνει πως για παράδειγμα το TRUE και το $TRUE είναι γενικώς διαφορετικά.
Αν χρησιμοποιείτε μία μη καθορισμένη σταθερά, η PHP υποθέτει ότι εννοείτε το όνομα της ίδιας της σταθεράς, σαν να είχατε καλέσει ως string (CONSTANT εναντίον "CONSTANT"). Ένα λάθος επιπέδου E_NOTICE θα εμφανιστεί όταν αυτό συμβεί. Δείτε επίσης και το manual σχετικά με το γιατί $foo[bar] είναι λανθασμένο (εκτός και αν πρώτα έχετε ορίσει, define(), την bar ως σταθερά). Αν απλά θέλετε να ελένξετε αν η σταθερά έχει οριστεί, χρησιμοποιείστε τη συνάρτηση defined().
Oι διαφορές μεταξύ σταθερών και μεταβλητών είναι οι εξής:
- Οι σταθερές δεν έχουν το σύμβολο του δολαρίου ($) μπροστά τους.
- Οι σταθερές μπορούν να οριστούν μόνο χρησιμοποιώντας τη συνάρτηση define() και όχι με απλή ανάθεση.
- Οι σταθερές μπορούν να οριστούν και να προσπελαστούν από οπουδήποτε χωρίς να λάβουμε υπόψη τους κανόνες εμβέλειας μεταβλητών.
- Οι σταθερές δεν μπορούν να οριστούν ξανά ή να μην είναι καθορισμένες από τη στιγμή που έχουν οριστεί.
- Οι σταθερές μπορούν να υπολογίσουν μόνο βαθμωτές τιμές.
Example#1 Ορίζοντας σταθερές
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.
?>