defined()
La función defined() en PHP comprueba si una constante está definida o no.
Qué hace la función defined()
defined() es una función integrada de PHP que comprueba si una constante con un nombre dado ya existe. Devuelve true si la constante está definida y false si no lo está. Esta página cubre su sintaxis, cómo comprobar constantes de clase y con espacio de nombres, el error frecuente de confundirla con isset(), y cuándo conviene utilizarla.
Una constante es un nombre cuyo valor no puede cambiar durante una sola solicitud — se crea con define() o con la palabra clave const. Como referenciar una constante no definida provoca un error (una excepción Error en PHP 8+, un aviso en versiones anteriores), defined() permite comprobarlo primero y evitarlo.
Sintaxis
defined(string $constant_name): bool$constant_name— un string que contiene el nombre de la constante que se desea buscar. Ten en cuenta que se pasa el nombre como string ("GREETING"), no la constante en sí (GREETING).- Devuelve
truesi existe una constante con ese nombre,falseen caso contrario.
Pasar la constante sin comillas en lugar de su nombre —
defined(GREETING)— intenta evaluarGREETINGprimero, lo que falla si no está definida. Siempre pon el nombre entre comillas.
Ejemplo básico
Como GREETING fue creada en la línea anterior, defined("GREETING") devuelve true y el script imprime Hello, world!.
Comprobar constantes de clase y con espacio de nombres
defined() también funciona con constantes de clase y constantes con espacio de nombres. Usa el nombre completo calificado como 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)Para constantes de clase, la sintaxis es "ClassName::CONSTANT_NAME". Para una constante con espacio de nombres, se proporciona su ruta completa, p. ej. defined("App\\Config\\VERSION").
defined() vs. isset(): una confusión frecuente
defined() comprueba constantes; isset() comprueba variables (y claves de array / propiedades de object). No son intercambiables:
<?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 existsSi te encuentras usando defined("$variable"), casi con seguridad lo que necesitas es isset().
Cuándo utilizarla
- Proteger constantes de configuración opcionales. Los frameworks a menudo permiten predefinir constantes como
DEBUGoAPP_ENV; usadefined()para aplicar un valor por defecto solo cuando el usuario no haya establecido uno. - Evitar definiciones duplicadas. Redefinir una constante existente con
define()emite una advertencia, así que envuélvelo:if (!defined("API_KEY")) { define("API_KEY", "..."); }. - Detección de características. Las bibliotecas exponen constantes indicadoras (p. ej.
PHP_VERSION_ID);defined()confirma que una característica basada en constantes está disponible antes de depender de ella.
Para leer el valor de una constante una vez que sabes que existe, combina defined() con constant(). Para una visión más completa sobre la creación de constantes, consulta PHP Constants y Class Constants.