define() vs const en PHP: guía detallada con ejemplos
\n\nTodo desarrollador de PHP, tarde o temprano, se enfrenta a la pregunta: ¿cuál es la mejor manera de declarar una constante: con define() o con la palabra clave const? A primera vista, casi no hay diferencia. Ambas opciones crean un valor inmutable. Pero el diablo, como siempre, está en los detalles.
Este artículo no es un aburrido extracto del manual. Analizaremos casos reales donde un enfoque gana y el otro falla. Aprenderá cómo declarar correctamente constantes en PHP 7 y PHP 8, y podrá escribir código más limpio y predecible.
\n\n¿Listo? ¡Allá vamos!
\n\n¿Qué es una constante en PHP?
\n\nAntes de comparar, recordemos lo básico. Una constante es un identificador (nombre) para un valor simple. Su propiedad principal: el valor no puede ser modificado ni eliminado durante la ejecución del script.
\n\nLas constantes son útiles para almacenar configuraciones, rutas de archivos, claves de API y otros datos estáticos.
\n\n<?php\n// Definimos una constante con define()\ndefine('SITE_NAME', 'PythonLib');\n\n// Definimos una constante con const\nconst SITE_URL = 'https://pythonlib.ru';\n\necho SITE_NAME; // PythonLib\necho SITE_URL; // https://pythonlib.ru\n?>\n\nAmbos métodos funcionan. Pero profundicemos.
\n\nDiferencias principales entre define() y const
\n\n1. Momento de definición
\n\nEste es el punto más importante. const es una construcción del lenguaje que se procesa en la etapa de compilación (antes de la ejecución del script). define() es una función que se ejecuta en tiempo de ejecución (durante la ejecución del script).
¿Qué significa esto en la práctica?
\n\n- \n
constsolo se puede usar para declarar constantes en el nivel superior del script o dentro de una clase. No puede colocarconstdentro de un buclefor, una condiciónifo una función. \n define()se puede llamar en cualquier lugar: dentro de un bucle, condición o función. Esto proporciona flexibilidad. \n
<?php\n// Esto funciona\nif (true) {\n define('DB_HOST', 'localhost');\n}\n\n// Esto provoca un error fatal\nif (true) {\n // const DB_HOST = 'localhost'; // ¡Error!\n}\n\n// Pero const se puede usar dentro de una clase\nclass Config {\n const DB_NAME = 'test';\n}\n?>\n\nConclusión: si necesita definir una constante dinámicamente (por ejemplo, dependiendo de una condición o dentro de una función), elija define().
2. Tipos de datos
\n\nEn PHP 7 y 8, define() admite más tipos de datos que const.
- \n
constsolo puede aceptar valores escalares (int, float, string, bool, null) y arrays (a partir de PHP 5.6). \n define()desde PHP 7 también admite arrays, y en PHP 8 incluso objetos (aunque es un caso raro). \n
<?php\n// const puede almacenar un array (desde PHP 5.6)\nconst FRUITS = ['apple', 'banana', 'cherry'];\n\n// define() también puede (desde PHP 7)\ndefine('VEGETABLES', ['carrot', 'potato']);\n\n// Pero un objeto solo con define() (PHP 8+)\n// const OBJECT = new stdClass(); // ¡Error!\ndefine('MY_OBJECT', new stdClass()); // Funciona\n?>\n\nConclusión: para la mayoría de las tareas, ambas opciones son válidas. Pero si necesita almacenar un objeto, solo define().
3. Contexto: constantes globales vs de clase
\n\nconst es una herramienta universal. Se puede usar tanto fuera de las clases (constantes globales) como dentro de las clases (constantes de clase).
define() es solo para constantes globales. Dentro de una clase