W3docs

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) e null sono sempre stati supportati; gli array sono diventati valori validi in PHP 7.0.
  • $case_insensitive (facoltativo) — storicamente, passare true consentiva 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

php— editable, runs on the server

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:

Caratteristicadefine()const
Quando viene eseguitaA runtimeA compile time
Uso condizionale / in loopSì — può stare dentro if/forNo — deve essere al livello superiore o in una classe
Nome dinamicoSì — il nome può essere una variabileNo — il nome è fisso
Costanti di classeNo

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. Scrivi echo GREETING;, non echo $GREETING; o echo "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. GREETING e Greeting sono 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.

Pratica

Pratica
In PHP, come viene utilizzata la funzione 'define'?
In PHP, come viene utilizzata la funzione 'define'?
Was this page helpful?