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 d’abord une instance.
Tu déclares une méthode statique à l’aide du mot-clé static et tu l’appelles 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);
Sortie :
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 aucune instance d’objet. Elles peuvent uniquement accéder aux propriétés statiques et aux autres méthodes statiques à l’aide de self::.
Point clé : Les méthodes statiques sont utiles pour les fonctions utilitaires qui n’ont pas besoin de l’état d’un objet, ou pour gérer des données au niveau de la classe. Elles fournissent des fonctionnalités sans nécessiter l’instanciation d’un objet.
Défi
FacileConstruisons un système de génération d’ID 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’ID uniques en utilisant uniquement des membres statiques. La classe doit posséder une propriété statique privée$lastIdinitialisée à0et une propriété statique privée$prefixdéfinie sur"ID". Créez une méthode statiquegenerate()qui incrémente le dernier ID et renvoie une chaîne formatée combinant le préfixe et le nouvel ID (comme"ID1","ID2", etc.). Ajoutez une méthode statiquesetPrefix($newPrefix)qui modifie le préfixe, ainsi qu’une méthode statiquegetLastId()qui renvoie la valeur actuelle de$lastId.main.php: incluez le fichier de la classe IdGenerator. Générez deux ID en utilisant le préfixe par défaut et affichez chacun sur sa propre ligne. Modifiez ensuite le préfixe en"USER"à l’aide de la méthode statique, générez deux ID supplémentaires et affichez chacun d’eux. Enfin, affichez le numéro du dernier ID en appelant la méthode statique appropriée.
N’oubliez pas que les méthodes statiques sont appelées directement sur la classe à l’aide de 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 doit montrer la progression des ID avec différents préfixes, en démontrant comment les propriétés statiques conservent leurs valeurs au fil de plusieurs appels de méthodes.
Essayez vous-même
<?php
// Inclure le fichier de la classe IdGenerator
require_once 'IdGenerator.php';
// TODO: Générer deux IDs 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 IDs supplémentaires et afficher chacun sur sa propre ligne
// TODO: Afficher le dernier numéro d'ID 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
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