Constantes en PHP: Una guía detallada
Una constante en PHP es un valor que no puede cambiarse una vez definido. Son esenciales en la programación y juegan un papel crucial en el mantenimiento del
Una constante en PHP es un valor con nombre que no puede cambiarse una vez definido. A diferencia de las variables, las constantes no llevan el prefijo $, están disponibles automáticamente en todo el script (sin reglas de ámbito), y cualquier intento de reasignarlas se ignora o genera un error. Son ideales para valores fijos como configuraciones, claves de API, números de versión y límites matemáticos.
Este capítulo explica cómo definir constantes de dos formas distintas, las diferencias prácticas entre ellas, las constantes mágicas, las constantes de clase y los errores comunes que suelen cometerse.
Definición de una constante
PHP ofrece dos herramientas: la función define() y la palabra clave const. Ambas reciben un nombre y un valor.
<?php
// Using define()
define("SITE_NAME", "W3docs");
// Using the const keyword
const VERSION = "8.4";
echo SITE_NAME; // W3docs
echo PHP_EOL;
echo VERSION; // 8.4Por convención, los nombres de las constantes se escriben en MAYÚSCULAS, aunque PHP no lo exige. Un nombre válido comienza con una letra o guion bajo, seguido de letras, números o guiones bajos — igual que un nombre de variable, pero sin el $.
Nótese que se hace referencia a una constante por su nombre simple (SITE_NAME), sin el $. Las constantes distinguen entre mayúsculas y minúsculas: SITE_NAME y site_name son dos constantes diferentes.
const vs define()
Ambas producen el mismo tipo de constante, pero se comportan de forma diferente a nivel del lenguaje. Saber cuál usar evita errores sutiles:
const | define() | |
|---|---|---|
| Se evalúa en | Tiempo de compilación | Tiempo de ejecución |
Puede usarse dentro de if/bucles/funciones | No (solo en nivel superior / cuerpo de clase) | Sí |
| El nombre puede construirse dinámicamente | No | Sí (es solo un argumento string) |
| Funciona dentro de clases | Sí (define una constante de clase) | No |
Dado que define() se ejecuta en tiempo de ejecución, es la opción adecuada cuando una constante solo debe existir bajo ciertas condiciones:
<?php
if (!defined("DEBUG")) {
define("DEBUG", true);
}
// define() can build the name dynamically — const cannot:
$key = "MAX_USERS";
define($key, 100);
echo MAX_USERS; // 100const, evaluada en tiempo de compilación, es más rápida y la opción convencional para constantes de nivel superior en código moderno.
Verificar y leer constantes
Antes de usar una constante cuya existencia sea incierta, verifícala con defined(). Para obtener el valor de una constante cuando solo tienes su nombre como string, usa constant():
<?php
define("TIMEOUT", 30);
if (defined("TIMEOUT")) {
echo constant("TIMEOUT"); // 30
}Las constantes pueden almacenar arrays
Desde PHP 7, las constantes no se limitan a escalares (int, float, string, bool) — también pueden almacenar arrays. Esto es útil para tablas de búsqueda fijas:
<?php
const ALLOWED_ROLES = ["admin", "editor", "viewer"];
echo ALLOWED_ROLES[1]; // editorConsulta Tipos de datos en PHP para ver qué puede almacenar cada tipo de valor.
Constantes mágicas
PHP incluye constantes mágicas — nombres predefinidos cuyo valor cambia según el lugar donde se usan. Se escriben con dobles guiones bajos al inicio y al final:
| Constante | Se resuelve a |
|---|---|
__LINE__ | El número de línea actual |
__FILE__ | La ruta completa del archivo |
__DIR__ | El directorio del archivo |
__FUNCTION__ | El nombre de la función actual |
__CLASS__ | El nombre de la clase actual |
__METHOD__ | El nombre del método de la clase |
<?php
function greet() {
echo "Called from: " . __FUNCTION__ . PHP_EOL;
echo "On line: " . __LINE__ . PHP_EOL;
}
greet();Constantes de clase
Las constantes declaradas dentro de una clase pertenecen a la clase en sí, no a ninguna instancia. Se declaran con const y se accede a ellas con el operador :: (resolución de ámbito):
<?php
class Circle {
const PI = 3.14159;
public function area(float $r): float {
return self::PI * $r * $r;
}
}
echo Circle::PI; // 3.14159
echo PHP_EOL;
echo (new Circle)->area(2); // 12.56636Para una visión más detallada, lee Constantes de clase en PHP.
Constantes vs variables
Las dos cumplen funciones diferentes. Una variable almacena datos que se espera que cambien; una constante fija un valor en su lugar. Las diferencias clave:
| Variable | Constante | |
|---|---|---|
| Prefijo | $nombre | NOMBRE (sin signo) |
| Reasignable | Sí | No |
| Ámbito | Local salvo que se haga global | Global automáticamente |
| Distingue mayúsculas/minúsculas | Sí | Sí |
Usa una constante siempre que un valor deba mantenerse fijo durante toda la ejecución — flags de configuración, límites, strings fijos — para que no pueda sobrescribirse accidentalmente en otro lugar.
Errores comunes
- Redefinir una constante. Llamar a
define()dos veces con el mismo nombre genera una advertencia y conserva el primer valor; redeclarar conconstes un error fatal. Las constantes son de escritura única. - Olvidar que el
$no existe. Escribirecho $SITE_NAMEbusca una variable indefinida, no tu constante. - Constantes indefinidas. En PHP 8+, usar una constante de tipo bare-word no definida lanza un
Error. Siempre usadefine()antes de usarla, o protégete condefined().
Conclusión
Las constantes de PHP ofrecen una forma segura de almacenar valores que nunca deben cambiar: defínelas con const para valores ordinarios de nivel superior o con define() cuando necesites lógica en tiempo de ejecución o un nombre dinámico, agrupa datos fijos en constantes de array o de clase, y apóyate en las constantes mágicas integradas para depuración. Bien utilizadas, mantienen la configuración en un solo lugar y evitan reasignaciones accidentales.