É possível definir valores constantes em cada classe permanecendo a mesma e imutável. Constantes diferem de variáveis normais, ao não usar o símbolo $ para declará-las ou usá-las. A visibilidade padrão de constantes de classe é public.
O valor deve ser uma expressão constante, não podendo ser (por exemplo) uma variável, uma propriedade, ou uma chamada a uma função.
Também é possível que interfaces tenham constantes. Veja na documentação de interface os exemplos.
A partir do PHP 5.3.0, é possível referenciar a classe usando uma variável. O valor da variável não pode ser uma palavra-chave (e.g. self, parent e static).
Constantes de classe são alocadas por classe, e não em cada instância da classe.
Exemplo #1 Definindo e usando uma constante
<?php
class MinhaClasse
{
const constante = 'valor constante';
function mostrarConstante() {
echo self::constante . "\n";
}
}
echo MinhaClasse::constante . "\n";
$classname = "MinhaClasse";
echo $classname::constante; // A partir do PHP 5.3.0
$classe = new MinhaClasse();
$classe->mostrarConstante();
echo $classe::constante; // A partir do PHP 5.3.0
?>
Exemplo #2 Exemplo com informação estática
<?php
class foo {
// A partir do PHP 5.3.0
const BAR = <<<'EOT'
bar
EOT;
// A partir do 5.3.0
const BAZ = <<<EOT
baz
EOT;
}
?>
Nota:
O suporte para inicialização de constantes com Heredoc e Nowdoc foi adicionado no PHP 5.3.0.
Exemplo #3 Exemplo de expressão constante
<?php
const ONE = 1;
class foo {
// A partir do 5.6.0
const TWO = ONE * 2;
const THREE = ONE + self::TWO;
const SENTENCE = 'O valor de THREE é '.self::THREE;
}
?>
É possível fornecer uma expressão escalar envolvendo strings e numéricos literais e/ou constantes no contexto de uma constante de classe.
Nota:
Expressões constantes foram adicionados no PHP 5.6.0.
Exemplo #4 Modificadores de visibilidade em contantes de classe
<?php
class Foo {
// As of PHP 7.1.0
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>
O exemplo acima irá imprimir no PHP 7.1:
bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
Nota:
Modificadores de visibilidade estão disponíveis desde o PHP 7.1.0.