W3docs

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 true se esiste una costante con quel nome, false altrimenti.

Passare la costante nuda invece del suo nome — defined(GREETING) — tenta di valutare GREETING prima, il che fallisce se non è definita. Metti sempre il nome tra virgolette.

Esempio base

php— editable, runs on the server

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 exists

Se 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 DEBUG o APP_ENV; usa defined() 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.

Esercitazione

Pratica
Cosa fa la funzione defined() in PHP?
Cosa fa la funzione defined() in PHP?
Was this page helpful?