Propriétés d’instance vs statiques
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 15 sur 91.
Lorsque vous créez une propriété dans une classe, vous devez décider si elle appartient à chaque objet individuel ou à la classe elle-même. Cette distinction correspond à la différence entre les propriétés d’instance et les propriétés statiques.
Les propriétés d’instance sont celles utilisées par défaut. Chaque objet obtient sa propre copie de la propriété, et la modifier dans un objet n’affecte pas les autres :
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo $alice->name . "\n";
echo $bob->name . "\n";
Sortie :
Alice
Bob
Les propriétés statiques appartiennent à la classe, et non à un objet spécifique. Vous les déclarez avec le mot-clé static et y accédez en utilisant le nom de la classe avec :: au lieu d’un objet avec -> :
<?php
class User {
public static $count = 0;
public $name;
public function __construct($name) {
$this->name = $name;
self::$count++;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo User::$count;
Sortie :
2
Remarquez que $count est partagé entre toutes les instances. Chaque fois que nous créons un nouvel User, la même variable $count est incrémentée. À l’intérieur de la classe, nous utilisons self::$count pour faire référence à la propriété statique.
Point clé : Utilisez des propriétés d’instance lorsque chaque objet a besoin de sa propre valeur. Utilisez des propriétés statiques lorsque vous devez partager des données entre tous les objets d’une classe, par exemple pour compter les instances ou stocker la configuration.
Défi
FacileConstruisons un système de suivi des visiteurs qui illustre la différence entre les propriétés d’instance (uniques à chaque visiteur) et les propriétés statiques (partagées entre tous les visiteurs).
Vous allez créer deux fichiers pour organiser votre code :
Visitor.php: définissez une classeVisitorqui suit les visiteurs individuels et conserve un décompte cumulatif du nombre total de visiteurs. Chaque visiteur doit avoir sa propre propriété$name(propriété d’instance), tandis qu’une propriété$totalVisitorsdoit être partagée par toutes les instances (propriété statique). Le constructeur accepte un nom, l’affecte à la propriété et incrémente le nombre total de visiteurs. Ajoutez une méthodegetInfo()qui renvoie"[name] is visitor #[totalVisitors]".main.php: incluez le fichier de la classe Visitor, puis créez trois visiteurs portant les noms"Alice","Bob"et"Charlie"(dans cet ordre). Après avoir créé les trois visiteurs, affichez le résultat de l’appel àgetInfo()pour chaque visiteur (chacun sur sa propre ligne), puis affichez le nombre total de visiteurs en accédant directement à la propriété statique depuis la classe à l’aide deVisitor::$totalVisitors.
N’oubliez pas qu’à l’intérieur de la classe, vous accédez aux propriétés statiques à l’aide de self::$propertyName, tandis qu’à l’extérieur de la classe, vous utilisez ClassName::$propertyName. Les propriétés d’instance sont accessibles avec $this->propertyName, comme d’habitude.
Votre sortie doit afficher chaque visiteur avec le numéro qui lui a été attribué, suivi du nombre total final sur la dernière ligne.
Essayez vous-même
<?php
// Inclure la classe Visitor
require_once 'Visitor.php';
// TODO : Créer trois visiteurs avec les noms "Alice", "Bob" et "Charlie" (dans cet ordre)
// TODO : Afficher le résultat de getInfo() pour chaque visiteur (chacun sur sa propre ligne)
// TODO : Afficher le nombre total de visiteurs en utilisant Visitor::$totalVisitors
?>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