defined()
La funzione defined() in PHP verifica se una costante è definita o meno.
Cosa fa la funzione defined()
defined() è una funzione PHP integrata che verifica se una costante con un dato nome esiste già. Restituisce true se la costante è definita e false in caso contrario. Questa pagina illustra la sintassi, come verificare le costanti di classe e con namespace, l'errore comune di confonderla con isset() e quando conviene effettivamente usarla.
Una costante è un nome il cui valore non può cambiare durante una singola richiesta — creata con define() o con la parola chiave const. Poiché il riferimento a una costante non definita genera un errore (un'eccezione Error in PHP 8+, un notice nelle versioni precedenti), defined() consente di verificare prima ed evitare questo problema.
Sintassi
defined(string $constant_name): bool$constant_name— una string che contiene il nome della costante da cercare. Tieni presente che si passa il nome come string ("GREETING"), non la costante stessa (GREETING).- Restituisce
truese esiste una costante con quel nome,falsealtrimenti.
Passare la costante nuda invece del suo nome —
defined(GREETING)— tenta di valutareGREETINGprima, il che fallisce se non è definita. Metti sempre il nome tra virgolette.
Esempio base
Poiché GREETING è stata creata nella riga precedente, defined("GREETING") restituisce true e lo script stampa Hello, world!.
Verifica di costanti di classe e con namespace
defined() funziona anche con le costanti di classe e con namespace. Usa il nome completo come string:
<?php
const PI = 3.14;
class Circle {
const SHAPE = "round";
}
var_dump(defined("PI")); // bool(true)
var_dump(defined("Circle::SHAPE")); // bool(true) — class constant
var_dump(defined("Circle::MISSING"));// bool(false) — no such constant
var_dump(defined("UNDEFINED")); // bool(false)Per le costanti di classe, la sintassi è "ClassName::CONSTANT_NAME". Per una costante con namespace si fornisce il percorso completo, ad esempio defined("App\\Config\\VERSION").
defined() vs. isset(): un errore comune
defined() controlla le costanti; isset() controlla le variabili (e le chiavi array / proprietà degli oggetti). Non sono intercambiabili:
<?php
$name = "Alex"; // a variable
define("APP_NAME", "W3"); // a constant
var_dump(isset($name)); // bool(true) — variable exists
var_dump(defined("name")); // bool(false) — no constant called "name"
var_dump(defined("APP_NAME")); // bool(true) — constant existsSe ti ritrovi a usare defined("$variable"), quasi certamente stai cercando isset().
Quando usarla
- Proteggere le costanti di configurazione opzionali. I framework spesso consentono di predefinire costanti come
DEBUGoAPP_ENV; usadefined()per applicare un valore predefinito solo quando l'utente non ne ha impostato uno. - Prevenire definizioni duplicate.
define()che ridefinisce una costante esistente genera un avviso, quindi racchiudilo in:if (!defined("API_KEY")) { define("API_KEY", "..."); }. - Rilevamento delle funzionalità. Le librerie espongono costanti indicatori (ad es.
PHP_VERSION_ID);defined()conferma che una funzionalità basata su costante è disponibile prima di affidarsi ad essa.
Per leggere il valore di una costante una volta verificata la sua esistenza, abbina defined() a constant(). Per una panoramica più ampia sulla creazione di costanti, consulta PHP Constants e Class Constants.