Menu

Constantes en PHP: define() vs const y constantes mágicas

Una constante en PHP es un nombre para un valor que no puede cambiar: const MAX_USERS = 100; o define('MAX_USERS', 100);. Aprende define frente a const, las constantes array, las constantes de clase con self::, cómo comprobarlas con defined() y las constantes mágicas __LINE__, __FILE__, __DIR__ y __CLASS__.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Una constante es un nombre para un valor que nunca cambia mientras se ejecuta el script. Declárala con const MAX_USERS = 100; o define('MAX_USERS', 100); y luego usa el nombre a secas, sin $.

Por convención, los nombres de constantes van en UPPER_SNAKE_CASE. Son globales: una constante declarada al principio de un archivo es visible dentro de cualquier función sin global.

define() vs const

Las dos crean una constante, pero actúan en momentos distintos. const se resuelve cuando PHP compila el archivo, y define() se ejecuta como cualquier otra llamada a función.

constdefine()
Dentro de if, bucles, funcionesNoSí
Nombre construido con una variableNoSí
Constantes de claseSíNo
El valor puede ser una expresiónSí, de constantes y literalesSí, cualquier valor
Namespace automáticoSíNo (indica el nombre completo)

Usa const por defecto, porque es más corta y se comprueba al compilar. Usa define() cuando la constante dependa de una condición o de un nombre calculado.

Las constantes no se pueden cambiar

Asignar un valor a una constante es un error de sintaxis:

<?php
const LIMIT = 10;
LIMIT = 20;
PHP Parse error:  syntax error, unexpected token "=" in /home/index.php on line 3

Definir dos veces la misma constante no es un error, pero PHP imprime un warning y conserva el primer valor:

<?php
define("LIMIT", 10);
define("LIMIT", 20);
echo LIMIT; // 10
Warning: Constant LIMIT already defined in /home/index.php on line 3

Cuando un valor puede estar ya definido (por ejemplo, en un archivo de configuración que se carga más de una vez), compruébalo antes con defined():

Constantes array

Una constante puede contener un array. Puedes leerlo con NAME[key], recorrerlo y pasarlo de un sitio a otro, pero no modificarlo.

Constantes de clase

Dentro de una clase, const declara una constante que pertenece a la clase. Léela con ClassName::NAME desde fuera y con self::NAME o static::NAME desde dentro. Las constantes de clase pueden tener visibilidad, pueden ser final y, desde PHP 8.3, pueden declarar un tipo.

Un grupo de constantes de clase relacionadas como STATUS_NEW y STATUS_PAID suele quedar mejor como un enum, que además impide que circulen valores no válidos.

Constantes mágicas: LINE, FILE, DIR y más

Las constantes mágicas cambian de valor según dónde aparecen. Se rellenan al compilar.

La más usada es __DIR__, el directorio del archivo actual. Construir las rutas de include a partir de ella hace que funcionen sea cual sea el directorio desde el que se arrancó el script: require __DIR__ . '/config.php';. Consulta include y require para ver el patrón completo.

Constantes predefinidas que conviene conocer

PHP define muchas constantes propias. Estas aparecen continuamente:

PHP_EOL es el final de línea del sistema en el que se ejecuta PHP ("\n" en Linux y macOS, "\r\n" en Windows). Está pensado para texto escrito en archivos y en la terminal; en la salida HTML un salto de línea no se ve, así que ahí usa <br>.

Preguntas frecuentes

¿Cuál es la diferencia entre define() y const en PHP?

const es una construcción del lenguaje que se resuelve al compilar el archivo: funciona en el nivel superior y dentro de clases, pero no dentro de if, bucles o funciones. define() es una función que se llama en tiempo de ejecución, así que funciona en cualquier sitio y el nombre se puede construir con una variable, pero no puede declarar constantes de clase.

¿Una constante de PHP puede ser un array?

Sí. Funcionan tanto const COLORS = ['red', 'green']; como define('COLORS', ['red', 'green']);, y lees un elemento con COLORS[0]. El array no se puede modificar después.

¿Cómo compruebo si una constante está definida en PHP?

Usa defined('NAME'), que recibe el nombre como cadena y devuelve true o false. Un patrón habitual es if (!defined('APP_ENV')) { define('APP_ENV', 'production'); }. Para constantes de clase, pasa 'ClassName::NAME'.

¿Qué son las constantes mágicas en PHP?

Constantes cuyo valor depende de dónde se escriben: __LINE__ (línea actual), __FILE__ (ruta completa del archivo), __DIR__ (su directorio), __FUNCTION__, __CLASS__, __METHOD__ y __NAMESPACE__. Se escriben con dos guiones bajos a cada lado y no distinguen mayúsculas y minúsculas.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR