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::BAR, PHP_EOL;
echo Foo::BAZ, PHP_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.