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