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

To Top