È possibile definire una variabile utilizzando la funzione define() o utilizzando la parola chiave const all'esterno di una definizione di una classe in PHP 5.3.0. Una volta definita una costante, non è possibile cambiare il valore o renderlo indefinito.
Le costanti possono contenere solo dati di tipo scalare (boolean, integer, float e string). È possibile definire costanti come resource, ma questo dovrebbe essere evitato, perchè può causare risultati inaspettati.
Per ottenere il valore di una costante è sufficiente specificarne il nome. A differenza delle variabili, non è necessario anteporre il simbolo $ al nome di una variabile. Si può anche utilizzare la funzione constant() per leggere il valore di una costante, nel caso in cui se ne volesse ottenere il nome dinamicamente. Si utilizzi get_defined_constants() per ottenere una lista delle variabili definite.
Nota: Costanti e variabili (globali) si trovano in un "namespace" differente. Questo implica che generalmente
TRUE
e $TRUE sono differenti.
Se si utilizza una costante indefinita, PHP assume che si intendesse il nome della costante stessa, come se si fosse chiamata come una string (COSTANTE vs "COSTANTE"). Un errore di livello E_NOTICE verrà rilasciato quando questo accade. Leggere anche la voce del manuale sul perchè $foo[bar] è errato (a meno che prima non si definisca bar come costante con define()). Per sapere se una costante è definita, si può utilizzare la funzione defined().
Di seguito sono riportate le principali differenze rispetto le variabili:
Example #1 Definizione di costanti
<?php define("COSTANTE", "Ciao mondo."); echo COSTANTE; // stampa "Ciao mondo." echo Costante; // stampa "Costante" e genera una notice. ?>
Example #2 Definizione di Costanti utilizzando la parola chiave const
<?php
// Funzion in PHP 5.3.0
const CONSTANT = 'Hello World';
echo CONSTANT;
?>
Nota:
Al contrario di definire costanti utilizzando define(), le costanti definite utilizzando la parola chiave const devono essere dichiarate nella scope del livello superiore perchè sono definite in fase di compilazione. Questo significa che non possono essere dichiarate all'interno di funzioni, cicli oppure istruzioni if.
Leggere anche Le Costanti delle Classi.