Constantes de classe

Notions théoriques
En PHP, une constante de classe est une valeur qui ne change pas (après avoir été définie dans une classe).
Les constantes de classe sont déclarées à l'intérieur d'une classe avec le mot-clé const.
Une fois définies, elles ne peuvent pas être modifiées.
Elles sont accessibles de partout, à l'intérieur comme à l'extérieur de la classe, et peuvent être utilisées sans instancier la classe.
Pour accéder à une constante de classe, nous utilisons l'opérateur de résolution de portée :: (comme pour les propriétés et méthodes statiques).
Par exemple, vous pouvez consulter les constantes de la classe PDO : https://www.php.net/manual/fr/pdo.constants.php
-
Les constantes sont sensibles à la casse.
-
Par convention, les constantes sont toujours en majuscule.
Exemple pratique
Prenons l'exemple de notre jeu de combat.
Supposons que nous ayons une classe Guerrier et que chaque guerrier a une force maximale.
Cette force maximale est la même pour tous les guerriers, donc nous pouvons la définir comme une constante de classe.
class Guerrier {
const FORCE_MAX = 100;
public function afficherForceMax() {
print(self::FORCE_MAX);
}
}
$guerrier = new Guerrier();
$guerrier->afficherForceMax(); // Affiche 100
print(Guerrier::FORCE_MAX); // Affiche 100
Dans cet exemple, FORCE_MAX est une constante de classe.
Nous pouvons y accéder :
- dans une méthode de la classe en utilisant
self::FORCE_MAX, - ou directement à partir de la classe en utilisant
Guerrier::FORCE_MAX.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Dans notre jeu de combat, chaque type de personnage a une force maximale différente.
-
Votre tâche est de définir une constante de classe pour la force maximale dans une classe abstraite
Personnage. -
Créez une méthode dans la classe abstraite
Personnagequi affiche la force maximale (quelque soit le type de personnage) à l'aide de la méthodeafficherForceMax()(sans s à Force). -
Ensuite, chaque classe de personnage (
Guerrier,Magicien,Archer) héritera de cette classe abstraite et définira sa propre valeur pour la force maximale. -
Ensuite, créez une classe
Jeuavec une méthodeafficherForcesMax()(avec un s à Forces) qui affiche la force maximale de tous les personnages (quelques soient leur types):
class Jeu {
public static function afficherForcesMax() {
print("Guerrier - ");
Guerrier::afficherForceMax();
print("Magicien - ");
Magicien::afficherForceMax();
print("Archer - ");
Archer::afficherForceMax();
}
}
Jeu::afficherForcesMax();
Utiliser const pour les valeurs qui ne changent jamais (force max, nombre de côtés d'un dé, etc.). Nommer les constantes en SNAKE_CASE_MAJUSCULES par convention. Préférer static::CONSTANTE à self::CONSTANTE dans les méthodes héritées — static:: utilise la liaison tardive et pointe vers la classe réelle de l'objet, pas la classe où la méthode est définie.