Statique
Définition : Attributs 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
Exemple : Compteur
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 STATIC6
// 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 à chaque17
// fois qu'un nouvel utilisateur est créé.18
self::$compteur++;
19
}
20
21
// 2. METHODE STATIC22
// 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 classe26
return self::$compteur;
27
}
28
}
29
30
// --- Utilisation ---31
32
// On peut appeler la méthode static SANS avoir d'objet33
// 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 : 036
37
echo "<br>";
38
39
// On crée des instances40
$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 : 246
47
echo "<br>";
48
49
// On crée un troisième utilisateur50
$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