define()
Scopri come PHP define() crea costanti, le differenze con const, i valori accettati e le insidie legate alla distinzione maiuscole/minuscole.
Cosa fa la funzione define()
La funzione define() crea una costante — un valore con nome che non può essere modificato una volta impostato. A differenza di una variabile, una costante non ha il prefisso $, è globale in tutto lo script (compreso all'interno delle funzioni) e qualsiasi tentativo di ridefinirla genera un avviso anziché sovrascrivere silenziosamente il valore.
Usa define() quando vuoi un'unica fonte di verità per un valore che non deve mai cambiare a runtime: un flag di configurazione, un numero di versione, un percorso di file o un endpoint API.
Sintassi
define(string $name, mixed $value, bool $case_insensitive = false): bool$name— il nome della costante. Per convenzione si scrive in maiuscolo con underscore (MAX_USERS), ma qualsiasi identificatore valido è accettato.$value— il valore da memorizzare. I tipi scalari (int,float,string,bool) enullsono sempre stati supportati; gli array sono diventati valori validi in PHP 7.0.$case_insensitive(facoltativo) — storicamente, passaretrueconsentiva di leggere la costante con qualsiasi combinazione di maiuscole e minuscole. Questo flag è deprecato da PHP 7.3 e rimosso in PHP 8.0, quindi omettilo e tratta i nomi delle costanti come sensibili alle maiuscole.
define() restituisce true in caso di successo e false in caso di errore.
Un Esempio di Base
Qui define() crea una costante chiamata GREETING che contiene Hello, world!, poi echo la stampa per nome — senza $ e senza virgolette.
Memorizzare un Array in una Costante
Da PHP 7.0 una costante può contenere un array, il che è utile per tabelle di ricerca fisse o elenchi di opzioni:
<?php
define("ROLES", ["admin", "editor", "viewer"]);
echo ROLES[1]; // editor
?>Verificare Prima di Usare una Costante
Leggere una costante non definita è un errore in PHP 8.0+. Usa defined() come guardia affinché il tuo codice si degradi in modo controllato:
<?php
if (!defined("APP_ENV")) {
define("APP_ENV", "production");
}
echo APP_ENV; // production
?>define() vs. const
PHP offre due modi per dichiarare una costante, e non sono intercambiabili:
| Caratteristica | define() | const |
|---|---|---|
| Quando viene eseguita | A runtime | A compile time |
| Uso condizionale / in loop | Sì — può stare dentro if/for | No — deve essere al livello superiore o in una classe |
| Nome dinamico | Sì — il nome può essere una variabile | No — il nome è fisso |
| Costanti di classe | No | Sì |
Scegli define() quando il nome o il valore vengono calcolati, o quando la dichiarazione deve essere condizionale. Usa const per costanti semplici, sempre dichiarate, e per le costanti di classe.
Errori Comuni
- Niente
$e niente virgolette durante la lettura. Scriviecho GREETING;, nonecho $GREETING;oecho "GREETING";. - Ridefinire genera un avviso, non sovrascrive. Un secondo
define("GREETING", ...)emette un avviso e il valore originale rimane. - I nomi sono sensibili alle maiuscole.
GREETINGeGreetingsono due costanti diverse ora che il flag case-insensitive è stato rimosso. - Definisci una volta, presto. Poiché le costanti sono globali e permanenti, impostale vicino all'inizio dello script o in un file di configurazione.
Conclusione
define() è il modo runtime per creare un valore globale e immutabile in PHP. Combinala con defined() per evitare avvisi di ridefinizione, preferisci const per costanti fisse a compile time e di classe, e consulta PHP Constants per una visione d'insieme.