Constantes de Classe

É possível definir constantes em cada classe separadamente. A visibilidade padrão de constantes de classe é public.

Note:

Constantes de classe podem ser redefinidas em classes filhas. A partir do PHP 8.1.0, constantes de classe não podem ser redefinidas numa classe filha se ela for qualificada como final.

Também é possível que interfaces tenham constantes. Veja na documentação de interface os exemplos.

É 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.

Example #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;

$classe = new MinhaClasse();
$classe->mostrarConstante();

echo $classe::CONSTANTE;
?>

A constante especial ::class permite a resolução de classes pelo seu nome completo em tempo de compilação, e isso é útil em classes com namespaces:

Example #2 Exemplo com informação estática

<?php
namespace foo {
    class bar {
    }

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

Example #3 Exemplo de expressão constante

<?php
const ONE = 1;
class foo {
    const TWO = ONE * 2;
    const THREE = ONE + self::TWO;
    const SENTENCE = 'The value of THREE is '.self::THREE;
}
?>

Example #4 Modificadores de visibilidade em constantes de classe

<?php
class Foo {
    public const BAR = 'bar';
    private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>

Saída do exemplo acima no PHP 7.1:

bar

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

Note:

Modificadores de visibilidade estão disponíveis desde o PHP 7.1.0.