Constantes de clases

Es posible definir valores constantes en función de cada clase manteniéndola invariable. Las constantes se diferencian de las variables comunes en que no utilizan el símbolo $ al declararlas o emplearlas. La visibilidad predeterminada de las constantes de clase es public.

El valor debe ser una expresión constante, no (por ejemplo) una variable, una propiedad o una llamada a una función.

También es posible que las interfaces tengan constantes. Consulte los ejemplos de la documentación de interfaces.

A partir de PHP 5.3.0, es posible referirse a una clase utilizando una variable. El valor de la variable no puede ser una palabra reservada (p.ej., self, parent o static).

Observe que las constantes de clase están asignadas una vez por clase, y no por cada instancia de la clase.

Ejemplo #1 Definición y uso de una constante

<?php
class MiClase
{
    const 
CONSTANTE 'valor constante';

    function 
mostrarConstante() {
        echo  
self::CONSTANTE "\n";
    }
}

echo 
MiClase::CONSTANTE "\n";

$nombreclase "MiClase";
echo 
$nombreclase::CONSTANTE "\n"// A partir de PHP 5.3.0

$clase = new MiClase();
$clase->mostrarConstante();

echo 
$clase::CONSTANTE."\n"// A partir de PHP 5.3.0
?>

Ejemplo #2 Ejemplo de datos estáticos

<?php
class foo {
    
// A partir de PHP 5.3.0
    
const BAR = <<<'EOT'
bar
EOT;
    
// A partir de PHP 5.3.0
    
const BAZ = <<<EOT
baz
EOT;
}
?>

Nota:

El soporte para la inicialización de constantes con la sintaxis de Heredoc y Nowdoc fue agregado en PHP 5.3.0.

La constante especial ::class está disponible a partir de PHP 5.5.0, y permite la resolución de nombres de clase completamente cualificados en la compilación. Esto es útil para clases en espacios de nombres:

Ejemplo #3 Ejemplo de ::class en espacio de nombres

<?php
namespace foo {
    class 
bar {
    }

    echo 
bar::class; // foo\bar
}
?>

Ejemplo #4 Ejemplo de expresión constante

<?php
const UNO 1;

class 
foo {
    
// A partir de PHP 5.6.0
    
const DOS UNO 2;
    const 
TRES UNO self::DOS;
    const 
SENTENCIA 'El valor de TRES es '.self::TRES;
}
?>

Es posible proporcionar una expresión escalar que implique literales numéricos y de string y/o constantes en el contexto de una constante de clase.

Nota:

El soporte para expresiones constantes se añadió en PHP 5.6.0.

Ejemplo #5 Modificadores de visibilidad de constantes de clase

<?php
class Foo {
    
// A partir de PHP 7.1.0
    
public const BAR 'bar';
    private const 
BAZ 'baz';
}
echo 
Foo::BARPHP_EOL;
echo 
Foo::BAZPHP_EOL;
?>

Salida del ejemplo anterior en PHP 7.1:

bar

Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …

Nota:

A partir de PHP 7.1.0, están permitidos los modificadores de visibilidad para constantes de clase.