Sintaxis

Las constantes pueden definirse usando la palabra clave const o usando la función define(). Mientras que define() permite definir una constante con una expresión arbitraria, la palabra clave const tiene restricciones como se describe en el siguiente párrafo. Una vez definida, una constante no puede ser modificada ni eliminada.

Al usar la palabra clave const, solo se aceptan expresiones escalares (bool, int, float y string) y arrays constantes que contengan únicamente expresiones escalares. Es posible definir constantes como resource, pero debe evitarse, ya que puede causar resultados inesperados.

El valor de una constante se obtiene simplemente especificando su nombre. A diferencia de las variables, una constante no va precedida de un signo $. También es posible usar la función constant() para leer el valor de una constante si su nombre se obtiene dinámicamente. Use get_defined_constants() para obtener una lista de todas las constantes definidas.

Nota: Las constantes y las variables (globales) se encuentran en espacios de nombres diferentes. Esto implica que, por ejemplo, true y $TRUE son generalmente diferentes.

Si se usa una constante no definida, se lanza un Error. Antes de PHP 8.0.0, las constantes no definidas se interpretaban como una cadena (string) sin comillas, es decir (CONSTANT vs "CONSTANT"). Este comportamiento está obsoleto desde PHP 7.2.0, y se emite un error de nivel E_WARNING cuando ocurre. Antes de PHP 7.2.0, se emitía un error de nivel E_NOTICE. Consulte también la entrada del manual sobre por qué $foo[bar] es incorrecto (a menos que bar sea una constante). Esto no se aplica a las constantes (totalmente) cualificadas, que siempre lanzarán un Error si no están definidas.

Nota: Para comprobar si una constante está definida, use la función defined().

Estas son las diferencias entre constantes y variables:

  • Las constantes no llevan el signo de dólar ($) delante;
  • Las constantes pueden definirse y accederse desde cualquier lugar sin importar las reglas de ámbito de las variables;
  • Las constantes no pueden redefinirse ni eliminarse una vez establecidas; y
  • Las constantes solo pueden evaluarse a valores escalares o arrays.

Ejemplo #1 Definición de constantes

<?php
define
("CONSTANT", "Hello world.");
echo
CONSTANT; // muestra "Hello world."
echo Constant; // Lanza un Error: Undefined constant "Constant"
// Antes de PHP 8.0.0, muestra "Constant" y emite una advertencia.
?>

Ejemplo #2 Definición de constantes usando la palabra clave const

<?php
// Valor escalar simple
const CONSTANT = 'Hello World';

echo
CONSTANT;

// Expresión escalar
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo
ANOTHER_CONST;

const
ANIMALS = array('dog', 'cat', 'bird');
echo
ANIMALS[1]; // muestra "cat"

// Arrays constantes
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo
ANIMALS[1]; // muestra "cat"
?>

Nota:

A diferencia de la definición de constantes con define(), las constantes definidas con la palabra clave const deben declararse en el ámbito de nivel superior porque se definen en tiempo de compilación. Esto significa que no pueden declararse dentro de funciones, bucles, instrucciones if o bloques try/catch.

Ver también

add a note

User Contributed Notes 3 notes

up
49
souzanicolas87 at gmail dot com
4 years ago
the documentation doesn't go too far in explaining the crucial difference between the two ways of declaring constants in PHP.

Const is handled at compile time, define() at run time. For this reason, a constant cannot be conditionally defined using Const, for example.

Another difference we can notice occurs in the constant declarations in classes. Const infiltrates the class scope, while define() leaks into the global scope.

<?php

Class Myclass (){
    const NAME = "Nicolas";
}

?>

The NAME constant is within the scope of the MyClass class.
up
1
povares at skippergroupe dot com
1 year ago
"const is defined at compile time" may not be true, depending on what you call "defining".

Although you can't define a const inside an if, like 

    if ($c === 'a') {
        const c = a;
    }
    else {
        const c = b;
    }
    # Results in a parse error 

you can assign it a value depending on a conditionnal 'define' constant

    $a = 1;

    if ($a === 1) {
        define('a', 'one');
    }
    else {
        define('a', 'two');
    }

    const c = a;
    # Valid, c equals "one"

https://onlinephp.io/c/b8227
up
6
login at (two)view dot de
8 years ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
To Top