Méthodes et propriétés statiques
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 17 sur 91.
Tout comme les propriétés peuvent être statiques, les méthodes peuvent également appartenir à la classe elle-même plutôt qu'à des objets individuels. Les méthodes statiques sont appelées directement sur la classe, sans avoir besoin de créer une instance au préalable.
Vous déclarez une méthode statique en utilisant le mot-clé static et vous l'appelez avec le nom de la classe et l'opérateur :: :
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
public static function multiply($a, $b) {
return $a * $b;
}
}
echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);
Résultat :
8
8Les méthodes statiques fonctionnent bien avec les propriétés statiques. Un modèle courant consiste à utiliser une méthode statique pour gérer les données partagées d'une classe :
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
Counter::increment();
echo Counter::getCount();
Sortie :
2Notez que les méthodes statiques ne peuvent pas utiliser $this car il n'y a pas d'instance d'objet. Elles ne peuvent accéder qu'aux propriétés statiques et aux autres méthodes statiques en utilisant self::.
Point clé : Les méthodes statiques sont utiles pour les fonctions utilitaires qui n'ont pas besoin de l'état de l'objet, ou pour gérer les données au niveau de la classe. Elles fournissent des fonctionnalités sans nécessiter d'instanciation d'objet.
Défi
FacileConstruisons un système de génération d'identifiants qui utilise des méthodes et des propriétés statiques pour créer des identifiants uniques sans avoir besoin d'instancier des objets.
Vous allez créer deux fichiers pour organiser votre code :
IdGenerator.php— Définissez une classeIdGeneratorqui gère la génération d'identifiants uniques en utilisant uniquement des membres statiques. La classe doit avoir une propriété statique privée$lastIdcommençant à0et une propriété statique privée$prefixdéfinie sur"ID". Créez une méthode statiquegenerate()qui incrémente le dernier identifiant et renvoie une chaîne formatée combinant le préfixe et le nouvel identifiant (comme"ID1","ID2", etc.). Ajoutez une méthode statiquesetPrefix($newPrefix)qui modifie le préfixe, et une méthode statiquegetLastId()qui renvoie la valeur actuelle de$lastId.main.php— Incluez le fichier de la classe IdGenerator. Générez deux identifiants en utilisant le préfixe par défaut et affichez chacun sur sa propre ligne. Ensuite, changez le préfixe en"USER"en utilisant la méthode statique, générez deux autres identifiants et affichez chacun d'eux. Enfin, affichez le dernier numéro d'identifiant en appelant la méthode statique appropriée.
Rappelez-vous que les méthodes statiques sont appelées directement sur la classe en utilisant ClassName::methodName(), et qu'à l'intérieur de la classe, vous accédez aux propriétés statiques avec self::$propertyName. Comme il n'y a pas d'instance d'objet, vous ne pouvez pas utiliser $this dans les méthodes statiques.
Votre sortie devrait montrer la progression des identifiants avec différents préfixes, démontrant comment les propriétés statiques conservent leurs valeurs à travers plusieurs appels de méthode.
Aide-mémoire
Les méthodes statiques appartiennent à la classe elle-même et sont appelées sans créer d'instance. Déclarez-les en utilisant le mot-clé static et appelez-les avec le nom de la classe et l'opérateur :: :
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
}
echo MathHelper::add(5, 3); // 8
Les méthodes statiques peuvent accéder aux propriétés statiques en utilisant self:: :
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
echo Counter::getCount(); // 1
Les méthodes statiques ne peuvent pas utiliser $this car il n'y a pas d'instance d'objet. Elles ne peuvent accéder qu'aux propriétés statiques et aux autres méthodes statiques en utilisant self::.
Les méthodes statiques sont utiles pour les fonctions utilitaires qui n'ont pas besoin de l'état de l'objet, ou pour gérer des données au niveau de la classe sans nécessiter l'instanciation d'un objet.
Essayez vous-même
<?php
// Inclure le fichier de la classe IdGenerator
require_once 'IdGenerator.php';
// TODO: Générer deux identifiants en utilisant le préfixe par défaut et afficher chacun sur sa propre ligne
// TODO: Changer le préfixe en "USER" en utilisant la méthode statique
// TODO: Générer deux identifiants supplémentaires et afficher chacun sur sa propre ligne
// TODO: Afficher le dernier numéro d'identifiant en utilisant la méthode statique appropriée
?>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