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 devraient jamais changer. Les constantes de classe offrent un moyen de définir des valeurs fixes qui restent les mêmes pour toutes les instances et ne peuvent pas être modifiées après leur déclaration.
Vous définissez une constante en utilisant le mot-clé const à l'intérieur d'une classe. Par convention, les noms de constantes sont écrits 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 en utilisant self::CONSTANT_NAME à l'intérieur de la classe ou 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 clé : 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 tout au long de 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érature qui utilise des constantes de classe pour stocker des valeurs de conversion fixes qui ne changent jamais.
Vous allez créer deux fichiers pour organiser votre code :
Temperature.php— Définissez une classeTemperaturequi gère les conversions de température. La classe doit avoir trois constantes :FREEZING_POINT_Cdéfinie à0,BOILING_POINT_Cdéfinie à100, etCONVERSION_FACTORdéfinie à1.8(utilisée pour la conversion de Celsius en Fahrenheit). Incluez une propriétépublic $celsiuset un constructeur qui accepte et définit la valeur Celsius. Ajoutez une méthodetoFahrenheit()qui convertit la température Celsius stockée en Fahrenheit en utilisant la formule :(celsius * CONVERSION_FACTOR) + 32. Ajoutez également une méthodegetStatus()qui retourne"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"sinon.main.php— Incluez le fichier de la classe Temperature. Créez trois objets Temperature avec les valeurs0,100, et25. Pour chaque température, affichez la conversion en Fahrenheit suivie du statut sur la même ligne dans ce format :"[fahrenheit]F - [status]". Chaque température doit être sur sa propre ligne. Après avoir affiché les trois, accédez à la constanteBOILING_POINT_Cdirectement depuis la classe (en utilisantTemperature::BOILING_POINT_C) et affichez-la sur une nouvelle ligne.
Rappelez-vous que l'on accède aux constantes en utilisant self::CONSTANT_NAME à l'intérieur de la classe et ClassName::CONSTANT_NAME depuis l'extérieur. Contrairement aux propriétés, les constantes n'utilisent pas le symbole $ lors de leur accès.
Aide-mémoire
Les constantes de classe sont des valeurs fixes qui ne changent jamais et sont partagées par toutes les instances d'une classe. Définissez-les à l'aide du mot-clé const :
<?php
class Circle {
const PI = 3.14159;
public function area($radius) {
return self::PI * $radius * $radius;
}
}
Accédez aux constantes en utilisant self::CONSTANT_NAME à l'intérieur de la classe :
return self::PI * $radius * $radius;
Accédez aux constantes en utilisant ClassName::CONSTANT_NAME depuis l'extérieur de la classe :
echo Circle::PI;
Différences clés par rapport aux propriétés statiques :
- Les constantes ne peuvent pas être modifiées après leur déclaration
- Les constantes n'utilisent pas le symbole
$ - Les constantes sont idéales pour les valeurs fixes telles que les paramètres de configuration, les codes d'état ou les constantes mathématiques
Par convention, les noms de constantes sont écrits en majuscules :
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK; // 200
Essayez vous-même
<?php
require_once 'Temperature.php';
// TODO: Créer trois objets Temperature avec les valeurs 0, 100 et 25
// TODO: Pour chaque température, afficher au format : "[fahrenheit]F - [status]"
// Chaque température sur sa propre ligne
// TODO: Accéder et afficher la constante BOILING_POINT_C directement depuis la classe
// Utiliser 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
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie