Constantes de classe

Il est possible de définir des constantes par classes qui restent identiques et non modifiables. La visibilité par défaut des constantes de classe est public.

Note:

Les constantes de classes peuvent être redéfinies par une classe enfant. À partir de PHP 8.1.0, les constantes de classes ne peuvent pas être redéfinies par une classe enfant si elle a été définit comme finale.

Il est aussi possible pour les interfaces d'avoir des constantes. Voir la documentation des interfaces pour des exemples.

Il est possible de référencer la classe en utilisant une variable. La valeur de la variable ne peut pas être un mot-clé (e.g. self, parent et static).

Notez que les constantes de classe sont allouées une fois par classe, et non pour chaque instance de classe.

Exemple #1 Définition et utilisation d'une constante de classe

<?php
class MyClass
{
  const 
CONSTANT 'valeur constante';

  function 
showConstant() {
    echo  
self::CONSTANT "\n";
  }
}

echo 
MyClass::CONSTANT "\n";

$classname "MyClass";
echo 
$classname::CONSTANT "\n";

$class = new MyClass();
$class->showConstant();

echo 
$class::CONSTANT."\n";
?>

La constante spéciale ::class permet une résolution de nom de classe pleinement qualifié au moment de la compilation, cela est utile pour les classes dans un espace de nom :

Exemple #2 Exemple d'utilisation de ::class

<?php
namespace foo {
    class 
bar {
    }

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

Exemple #3 Exemple d'expressions pour une constante de classe

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

Exemple #4 Modificateur de visibilité des constantes de classe, à partir de PHP 7.1

<?php
class Foo {
    public const 
BAR 'bar';
    private const 
BAZ 'baz';
}
echo 
Foo::BARPHP_EOL;
echo 
Foo::BAZPHP_EOL;
?>

Résultat de l'exemple ci-dessus en PHP 7.1 :

bar

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

Note:

À partir de PHP 7.1.0, les modificateurs de visibilité sont autorisés sur les constantes de classe.