W3docs

Le Costanti PHP: Una Guida Approfondita

Una costante in PHP è un valore che non può essere modificato una volta impostato. Le costanti sono fondamentali nella programmazione PHP.

Una costante in PHP è un valore con nome che non può essere modificato una volta definito. A differenza delle variabili, le costanti non sono precedute dal simbolo $, sono automaticamente disponibili ovunque nello script (nessuna regola di scope), e qualsiasi tentativo di riassegnarle viene ignorato o genera un errore. Sono ideali per valori fissi come impostazioni di configurazione, chiavi API, numeri di versione e limiti matematici.

Questo capitolo tratta come definire le costanti in due modi diversi, le differenze pratiche tra di essi, le costanti magiche, le costanti di classe e le insidie più comuni.

Definire una costante

PHP mette a disposizione due strumenti: la funzione define() e la parola chiave const. Entrambi accettano un nome e un valore.

<?php
// Using define()
define("SITE_NAME", "W3docs");

// Using the const keyword
const VERSION = "8.4";

echo SITE_NAME; // W3docs
echo PHP_EOL;
echo VERSION;   // 8.4

Per convenzione, i nomi delle costanti si scrivono in MAIUSCOLO, ma PHP non lo impone. Un nome valido inizia con una lettera o un underscore, seguito da lettere, numeri o underscore — esattamente come un nome di variabile, ma senza il $.

Si noti che si fa riferimento a una costante con il suo nome semplice (SITE_NAME), non con il $. Le costanti distinguono tra maiuscole e minuscole: SITE_NAME e site_name sono due costanti diverse.

const vs define()

Producono lo stesso tipo di costante ma si comportano diversamente a livello linguistico. Sapere quale utilizzare evita bug sottili:

constdefine()
Valutato aTempo di compilazioneTempo di esecuzione
Utilizzabile dentro if/cicli/funzioniNo (solo livello superiore / corpo di classe)
Il nome può essere costruito dinamicamenteNoSì (è solo un argomento stringa)
Funziona dentro le classiSì (definisce una costante di classe)No

Poiché define() viene eseguito in fase di esecuzione, è la scelta giusta quando una costante deve esistere solo in determinate condizioni:

<?php
if (!defined("DEBUG")) {
    define("DEBUG", true);
}

// define() can build the name dynamically — const cannot:
$key = "MAX_USERS";
define($key, 100);
echo MAX_USERS; // 100

const, valutato in fase di compilazione, è più veloce ed è la scelta convenzionale per le costanti di primo livello nel codice moderno.

Verificare e leggere le costanti

Prima di usare una costante la cui esistenza è incerta, verificarla con defined(). Per ottenere il valore di una costante quando si dispone solo del suo nome come stringa, usare constant():

<?php
define("TIMEOUT", 30);

if (defined("TIMEOUT")) {
    echo constant("TIMEOUT"); // 30
}

Le costanti possono contenere array

Da PHP 7, le costanti non sono limitate agli scalari (int, float, string, bool) — possono contenere anche array. Questo è utile per tabelle di ricerca fisse:

<?php
const ALLOWED_ROLES = ["admin", "editor", "viewer"];

echo ALLOWED_ROLES[1]; // editor

Vedere Tipi di Dati PHP per scoprire cosa può memorizzare ogni tipo di valore.

Costanti magiche

PHP include le costanti magiche — nomi predefiniti il cui valore cambia a seconda di dove vengono utilizzate. Si scrivono con doppio underscore iniziale e finale:

CostanteRestituisce
__LINE__Il numero di riga corrente
__FILE__Il percorso completo del file
__DIR__La directory del file
__FUNCTION__Il nome della funzione corrente
__CLASS__Il nome della classe corrente
__METHOD__Il nome del metodo della classe
<?php
function greet() {
    echo "Called from: " . __FUNCTION__ . PHP_EOL;
    echo "On line: " . __LINE__ . PHP_EOL;
}
greet();

Costanti di classe

Le costanti dichiarate all'interno di una classe appartengono alla classe stessa, non a nessuna istanza. Si dichiarano con const e si accede ad esse con l'operatore :: (risoluzione dello scope):

<?php
class Circle {
    const PI = 3.14159;

    public function area(float $r): float {
        return self::PI * $r * $r;
    }
}

echo Circle::PI;            // 3.14159
echo PHP_EOL;
echo (new Circle)->area(2); // 12.56636

Per un approfondimento, leggere Costanti di Classe PHP.

Costanti vs variabili

Le due servono scopi diversi. Una variabile contiene dati che si prevede cambino; una costante blocca un valore in modo permanente. I contrasti principali:

VariabileCostante
Prefisso$nomeNOME (nessun segno)
RiassegnabileNo
ScopeLocale a meno che non sia resa globaleGlobale automaticamente
Distingue maiuscole/minuscole

Utilizzare una costante ogni volta che un valore è destinato a rimanere fisso per tutta l'esecuzione — flag di configurazione, limiti, stringhe fisse — così non può essere accidentalmente sovrascritta altrove.

Insidie comuni

  • Ridefinire una costante. Chiamare define() due volte sullo stesso nome genera un avviso e mantiene il primo valore; ridichiarare con const è un errore fatale. Le costanti sono scrittura unica.
  • Dimenticare che il $ è assente. Scrivere echo $SITE_NAME cerca una variabile non definita, non la propria costante.
  • Costanti non definite. In PHP 8+, usare una costante bare-word non definita genera un Error. Definire sempre prima di usare, oppure proteggere con defined().

Conclusione

Le costanti PHP offrono un modo sicuro per memorizzare valori che non devono mai cambiare: definirle con const per i valori ordinari di primo livello o con define() quando si ha bisogno di logica a runtime o di un nome dinamico, raggruppare i dati fissi in costanti array o di classe, e fare affidamento sulle costanti magiche integrate per il debug. Usate correttamente, mantengono la configurazione in un unico posto e prevengono le riassegnazioni accidentali.

Pratica

Pratica
Quali sono le caratteristiche delle costanti PHP?
Quali sono le caratteristiche delle costanti PHP?
Was this page helpful?