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