Definire una costante
Per definire una costante, cioè un valore che non si modifica durante l'esecuzione dello script, dobbiamo usare la funzione define() con parametri il nome che vogliamo assegnare alla costante e il suo valore.
Per convenzione i nomi delle costanti si scrivono in maiuscolo e senza il simbolo del dollaro.
Una costante può avere solo un valore scalare, ma da PHP 7.0 anche un array.
Le costanti hanno validità globale quindi sono visibili da qualunque punto dello script e una volte definite non possono essere eliminate.
E' possibile usare la funzione get_defined_constants() per ottenere un array di tutte le costanti che sono state definite.
<?php
define("PIGRECO", 3.14);
define ("COSTANTE", "un valore che non si modifica a cui assegnamo un nome"):
echo "<p>la costante Pi greco, chiamata anche costante di Archimede o di Ludolph vale circa ".PIGRECO."</p>";
echo "<p>una costante è ".COSTANTE."</p>";
?>
Un altro modo per definire una costante è usare la parola chiave const. La differenza è che define() è una funzione mentre const è un costrutto del linguaggio, quindi define() definisce la costante a run-time mentre la parola chiave const la definisce a compile-time.
Le costanti magiche
Le costanti magiche non sono vere e proprie costanti perchè il loro valore cambia in base a dove vengono utilizzate.
Sono predefinite nella struttura del linguaggio perciò non è necessario usare la funzione define().
<?php
echo "<p>questo paragrafo si trova alla linea ".__LINE__." del file ".__FILE__."</p>";
?>
| Nome | Descrizione |
|---|---|
| __LINE__ | Il numero della riga corrente del file. |
| __FILE__ | Il percorso completo e il nome del file attualmente in esecuzione. Se utilizzato all'interno di un'inclusione, viene restituito il nome del file incluso. |
| __DIR__ | La cartella del file. Se utilizzato all'interno di un'inclusione, viene restituita la cartella del file incluso. Questo è equivalente a dirname(__FILE__). Il nome della cartella non ha slash a meno che non sia la directory root. |
| __FUNCTION__ | Il nome della funzione. |
| __CLASS__ | Il nome della classe. |
| __TRAIT__ | Il nome del trait. |
| __METHOD__ | Il nome del metodo della classe. |
| __NAMESPACE__ | Il nome del namespace corrente. |