Constantes dans les classes
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 16 sur 91.
Parfois, vous avez besoin de valeurs dans une classe qui ne doivent jamais changer. Les constantes de classe permettent de définir des valeurs fixes qui restent les mêmes pour toutes les instances et qui ne peuvent pas être modifiées après leur déclaration.
Vous définissez une constante à l’aide du mot-clé const à l’intérieur d’une classe. Par convention, les noms de constantes s’écrivent en majuscules :
<?php
class Circle {
const PI = 3.14159;
public $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function area() {
return self::PI * $this->radius * $this->radius;
}
}
$circle = new Circle(5);
echo $circle->area();
Sortie :
78.53975Comme les propriétés statiques, les constantes appartiennent à la classe plutôt qu’aux objets individuels. Vous y accédez à l’aide de self::CONSTANT_NAME à l’intérieur de la classe ou de ClassName::CONSTANT_NAME depuis l’extérieur :
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;
Sortie :
200
404Point essentiel : Contrairement aux propriétés statiques, les constantes ne peuvent pas être modifiées une fois définies. Elles sont idéales pour les valeurs qui doivent rester fixes dans toute votre application, telles que les valeurs de configuration, les codes d’état ou les constantes mathématiques.
Défi
FacileConstruisons un utilitaire de conversion de températures qui utilise des constantes de classe pour stocker des valeurs de conversion fixes qui ne changent jamais.
Tu vas créer deux fichiers pour organiser ton code :
Temperature.php: définir une classeTemperaturequi gère les conversions de température. La classe doit comporter trois constantes :FREEZING_POINT_Cdéfinie à0,BOILING_POINT_Cdéfinie à100etCONVERSION_FACTORdéfinie à1.8(utilisée pour la conversion des degrés Celsius en degrés Fahrenheit). Inclure une propriétépublic $celsiusainsi qu'un constructeur qui accepte et définit la valeur en degrés Celsius. Ajouter une méthodetoFahrenheit()qui convertit la température Celsius stockée en Fahrenheit à l'aide de la formule :(celsius * CONVERSION_FACTOR) + 32. Ajouter également une méthodegetStatus()qui renvoie"Freezing"si la température est égale à la constante du point de congélation,"Boiling"si elle est égale à la constante du point d'ébullition, ou"Normal"dans les autres cas.main.php: inclure le fichier de la classe Temperature. Créer trois objets Temperature avec les valeurs0,100et25. Pour chaque température, afficher la conversion en Fahrenheit, suivie du statut sur la même ligne, dans ce format :"[fahrenheit]F - [status]". Chaque température doit apparaître sur sa propre ligne. Après avoir affiché les trois valeurs, accéder directement à la constanteBOILING_POINT_Cdepuis la classe (en utilisantTemperature::BOILING_POINT_C) et l'afficher sur une nouvelle ligne.
Rappelle-toi que les constantes sont accessibles avec self::CONSTANT_NAME à l'intérieur de la classe et avec ClassName::CONSTANT_NAME depuis l'extérieur. Contrairement aux propriétés, les constantes n'utilisent pas le symbole $ lors de leur accès.
Essayez vous-même
<?php
require_once 'Temperature.php';
// TODO: Créez trois objets Temperature avec les valeurs 0, 100 et 25
// TODO: Pour chaque température, affichez au format : "[fahrenheit]F - [status]"
// Chaque température sur sa propre ligne
// TODO: Accédez et affichez la constante BOILING_POINT_C directement depuis la classe
// Utilisez la syntaxe ClassName::CONSTANT_NAME
?>Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne