Sintassi
Le costanti possono essere definite utilizzando la parola chiave const
o utilizzando la funzione define().
Mentre define() permette di definire
una costante in un'espressione arbitraria, la parola chiave const
ha
delle restrizioni come descritto nel paragrafo successivo.
Una volta definita, una costante non può mai essere
modificata o non definita.
Quando si utilizza la parola chiave const
,
sono accettate solo espressioni scalari (bool,
int, float e string) e
array costanti contenenti solo espressioni scalari.
È possibile definire costanti come una resource,
ma questo dovrebbe essere evitato, poiché può causare risultati inaspettati.
Si accede al valore di una costante semplicemente specificandone il nome.
A differenza delle variabili, una costante non è preceduta
da un $
.
È anche possibile utilizzare la funzione costant() per
leggere il valore di una costante se il nome della costante è ottenuto dinamicamente.
Si utilizzi get_defined_constants() per ottenere una lista
di tutte le costanti 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 non definita, viene generato un Error.
Prima di PHP 8.0.0, le costanti non definite venivano interpretate come una semplice
parola string, ovvero (COSTANTE vs "COSTANTE").
Questo fallback è deprecato a partire da PHP 7.2.0, e quando si verifica
viene emesso un errore di livello E_WARNING
.
Prima di PHP 7.2.0, è stato invece emesso un
errore di livello E_NOTICE.
Si veda anche la voce del manuale sul perché
$foo[bar] è
sbagliato (a meno che bar
sia una costante).
Questo non si applica alle costanti qualificate (completamente),
che genereranno sempre un Error se non definite.
Nota:
Per verificare che una costante sia impostata, utilizzare la funzione defined().
Di seguito sono riportate le principali differenze rispetto le variabili:
-
Le costanti non iniziano con il segno del dollaro
(
$
);
-
Le costanti possono essere definite e utilizzate ovunque
senza seguire le regole di visibilità;
-
Una volta impostate, le costanti non posso essere redefinite
e né annullate;
-
Le costanti possono essere valutate solo come valori scalari o array.
Example #1 Definizione di costanti
<?php
define("COSTANTE", "Ciao mondo.");
echo COSTANTE; // stampa "Ciao mondo."
echo Costante; // Emette un errore: Undefined constant "Constant"
// Prima di PHP 8.0.0, stampa "Constant" ed emette un avviso.
?>
Example #2 Definizione di Costanti utilizzando la parola chiave const
<?php
// Valore scalare semplice
const CONSTANT = 'Hello World';
echo CONSTANT;
// Espressione scalare
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo ANOTHER_CONST;
const ANIMALS = array('dog', 'cat', 'bird');
echo ANIMALS[1]; // visualizza "cat"
// Array costanti
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // visualizza "cat"
?>
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,
istruzioni if
oppure blocchi
try
/ catch
.