W3docs

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 true si existe una constante con ese nombre, false en caso contrario.

Pasar la constante sin comillas en lugar de su nombre — defined(GREETING) — intenta evaluar GREETING primero, lo que falla si no está definida. Siempre pon el nombre entre comillas.

Ejemplo básico

php— editable, runs on the server

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 exists

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

Práctica

Práctica
¿Qué hace la función defined() en PHP?
¿Qué hace la función defined() en PHP?
Was this page helpful?