define()
Aprende cómo PHP define() crea constantes, en qué se diferencia de const, qué valores acepta y los errores comunes sobre mayúsculas y constantes array.
Qué hace la función define()
La función define() crea una constante — un valor con nombre que no puede modificarse una vez establecido. A diferencia de una variable, una constante no tiene prefijo $, es global en todo el script (incluso dentro de funciones), y cualquier intento de redefinirla genera una advertencia en lugar de sobrescribir el valor silenciosamente.
Usa define() cuando quieras una única fuente de verdad para un valor que nunca debería cambiar en tiempo de ejecución: un indicador de configuración, un número de versión, una ruta de archivo o un endpoint de API.
Sintaxis
define(string $name, mixed $value, bool $case_insensitive = false): bool$name— el nombre de la constante. Por convención se escribe en mayúsculas con guiones bajos (MAX_USERS), pero cualquier identificador válido funciona.$value— el valor a almacenar. Los escalares (int,float,string,bool) ynullsiempre han sido admitidos; los array pasaron a ser valores válidos en PHP 7.0.$case_insensitive(opcional) — históricamente, pasartruepermitía leer la constante con cualquier combinación de mayúsculas y minúsculas. Este indicador está obsoleto desde PHP 7.3 y eliminado en PHP 8.0, así que omítelo y trata los nombres de constantes como sensibles a mayúsculas.
define() devuelve true en caso de éxito y false en caso de error.
Un ejemplo básico
Aquí define() crea una constante llamada GREETING que contiene Hello, world!, y luego echo la imprime por su nombre — sin $ y sin comillas.
Almacenar un array en una constante
Desde PHP 7.0, una constante puede contener un array, lo que resulta útil para tablas de búsqueda fijas o listas de opciones:
<?php
define("ROLES", ["admin", "editor", "viewer"]);
echo ROLES[1]; // editor
?>Verificar antes de usar una constante
Leer una constante no definida es un error en PHP 8.0+. Protégete con defined() para que tu código degrade con gracia:
<?php
if (!defined("APP_ENV")) {
define("APP_ENV", "production");
}
echo APP_ENV; // production
?>define() vs. const
PHP ofrece dos maneras de declarar una constante, y no son intercambiables:
| Característica | define() | const |
|---|---|---|
| Cuándo se ejecuta | En tiempo de ejecución | En tiempo de compilación |
| Uso condicional / en bucle | Sí — puede estar dentro de if/for | No — debe estar al nivel superior o en una clase |
| Nombre dinámico | Sí — el nombre puede ser una variable | No — el nombre es fijo |
| Constantes de clase | No | Sí |
Usa define() cuando el nombre o el valor se calculan, o cuando la declaración debe ser condicional. Usa const para constantes simples que siempre se declaran y para constantes de clase.
Errores comunes
- Sin
$y sin comillas al leer. Escribeecho GREETING;, noecho $GREETING;niecho "GREETING";. - Redefinir genera una advertencia, no sobrescribe. Un segundo
define("GREETING", ...)emite una advertencia y el valor original permanece. - Los nombres distinguen mayúsculas de minúsculas.
GREETINGyGreetingson dos constantes distintas ahora que el indicador de insensibilidad a mayúsculas ha desaparecido. - Define una vez, al principio. Dado que las constantes son globales y permanentes, establécelas cerca del inicio de tu script o en un archivo de configuración.
Conclusión
define() es la forma de crear en tiempo de ejecución un valor global e inmutable en PHP. Combínalo con defined() para evitar advertencias de redefinición, prefiere const para constantes fijas en tiempo de compilación y de clase, y consulta PHP Constants para una visión más amplia.