Aller au contenu principal

Propriétés/méthodes statiques

Notions théoriques

En PHP, les propriétés et méthodes statiques appartiennent à la classe elle-même, et non à une instance de cette classe. Cela signifie que vous n'avez pas besoin de créer un objet pour accéder à une propriété ou à une méthode statique.

Vous pouvez y accéder directement à partir de la classe en utilisant l'opérateur de résolution de portée ::

Exemple pratique

Imaginons que nous avons une classe Guerrier dans notre jeu de combat. Nous voulons compter combien de guerriers sont créés. Pour cela, nous pouvons utiliser une propriété statique.

class Guerrier {
public static $compteur = 0;

public function __construct() {
self::$compteur++;
}
}

$guerrier1 = new Guerrier();
$guerrier2 = new Guerrier();

print(Guerrier::$compteur); // Affiche 2

Dans cet exemple, chaque fois qu'un nouvel objet Guerrier est créé, le constructeur est appelé et la propriété statique $compteur est incrémentée. Nous pouvons accéder à cette propriété directement à partir de la classe Guerrier en utilisant l'opérateur de résolution de portée.

Test de mémorisation/compréhension


Qu'est-ce qu'une propriété statique en PHP ?


Comment accédez-vous à une propriété statique en PHP ?


Qu'est-ce que l'opérateur de résolution de portée en PHP ?


Qu'arrive-t-il si vous essayez d'accéder à une propriété statique à partir d'une instance de classe en PHP ?


Qu'est-ce qu'une propriété statique en PHP ?


Qu'est-ce qu'une méthode statique en PHP ?



TP pour réfléchir et résoudre des problèmes

Dans notre jeu de combat, nous avons maintenant plusieurs types de personnages.

remarque

Nous voulons garder une trace du nombre total de personnages créés, mais aussi du nombre de chaque type de personnage.

Pour cela, nous allons utiliser des propriétés statiques.

Votre tâche est de créer des classes, dans le répertoire 'classes', pour différents types de personnages (par exemple, Guerrier, Mage, Archer).

Chaque classe (Guerrier, Mage et Archer) doit avoir une propriété statique $compteur qui est incrémentée chaque fois qu'un nouvel objet de ce type est créé.

Ensuite, créez une classe Jeu, dans le répertoire 'classes', avec une méthode afficherCompteurs() qui affiche :

  • le nombre total de personnages

  • et le nombre de chaque type de personnage.

  • Voici le code du fichier Jeu.php :

    class Jeu {
    public static function afficherCompteurs() {
    $total = Guerrier::$compteur + Mage::$compteur + Archer::$compteur;
    print("Total des personnages : $total" . "\n");
    print("Guerriers : " . Guerrier::$compteur . "\n");
    print("Mages : " . Mage::$compteur . "\n");
    print("Archers : " . Archer::$compteur . "\n");
    }
    }
  • Voici le code qui sera saisi dans le fichier main.php :

    guerrier1 = new Guerrier();
    guerrier2 = new Guerrier();
    mage1 = new Mage();
    archer1 = new Archer();
    archer2 = new Archer();
    archer3 = new Archer();

    Jeu::afficherCompteurs();
Une solution