Statique

DéfinitionAttributs et méthodes statiques

Par défaut, les attributs et méthodes appartiennent à l'instance. Si on veut qu'ils appartiennent à la classe elle-même (partagés par toutes les instances), on utilise le mot-clé static.

On y accède avec l'opérateur :: (double deux-points), et on utilise self:: à l'intérieur de la classe.

Représentation UML d'attribut et méthode static
1
<?php
2
3
class MaClasse
4
{
5
  public static $attr;
6
7
  public function __construct($attr) {
8
      self::$attr = $attr;
9
  }
10
11
  public static function setAttr($attr){
12
    self::$attr = $attr;
13
  }
14
15
  public static function getAttr(){
16
    return self::$attr;
17
  }
18
}
19
20
Maclasse::setAttr(10); // attr = 10 partagé par toutes les instances
21
$element = new MaClasse(20);
22
echo Maclasse::getAttr(); // affiche 20

ExempleCompteur

L'attribut compteur permet de connaitre le nombre de fois qu'une classe a été instanciée.

1
<?php
2
3
class Utilisateur {
4
5
    // 1. ATTRIBUT STATIC
6
    // Ce compteur est PARTAGÉ par toutes les instances.
7
    // Il appartient à la classe "Utilisateur".
8
    public static $compteur = 0;
9
10
    public $nom;
11
12
    public function __construct(string $nom) {
13
        $this->nom = $nom;
14
        
15
        // On accède à l'attribut static avec "self::"
16
        // On incrémente le compteur de la CLASSE à chaque
17
        // fois qu'un nouvel utilisateur est créé.
18
        self::$compteur++;
19
    }
20
21
    // 2. METHODE STATIC
22
    // Cette méthode appartient aussi à la classe.
23
    // Elle ne peut accéder qu'aux attributs static.
24
    public static function getCompteur(): int {
25
        // On retourne la valeur du compteur de la classe
26
        return self::$compteur;
27
    }
28
}
29
30
// --- Utilisation ---
31
32
// On peut appeler la méthode static SANS avoir d'objet
33
// On utilise le nom de la classe et "::"
34
echo "Nombre d'utilisateurs au début : " . Utilisateur::getCompteur();
35
// Affiche: Nombre d'utilisateurs au début : 0
36
37
echo "<br>";
38
39
// On crée des instances
40
$user1 = new Utilisateur("Dupuis");
41
$user2 = new Utilisateur("Dupont");
42
43
// Le compteur a été incrémenté à chaque "new"
44
echo "Nombre d'utilisateurs après : " . Utilisateur::getCompteur();
45
// Affiche: Nombre d'utilisateurs après : 2
46
47
echo "<br>";
48
49
// On crée un troisième utilisateur
50
$user3 = new Utilisateur("Durant");
51
52
// On accède directement à l'attribut static (car il est public)
53
echo "Nombre d'utilisateurs (via l'attribut) : " . Utilisateur::$compteur;
54
// Affiche: Nombre d'utilisateurs (via l'attribut) : 3