TD2 – Compléments Attributs et méthodes statiques
Les attributs et méthodes static
Attributs statiques
Un attribut d’une classe est statique si il ne dépend pas des instances d’une classe mais juste de la classe. Si on pense en terme de mémoire, on peut avoir plusieurs instances différentes d’un même objet en mémoire, mais un attribut statique ne sera présent qu’une seule fois en mémoire.
Comme un attribut static ne dépend que de la classe, on l’appelle avec la
syntaxe NomClasse::$nom_attribut en PHP. Par contraste, les attributs classiques
s’accèdent par la syntaxe $instance->attribut.
De la même manière que $this renvoie sur l’instance courante lors de la
déclaration d’une classe (c-à-d $instance dans l’exemple précédent),
static renvoie la classe appelée (c-à-d NomClasse dans l’exemple précédent).
Il existe aussi le mot clé self qui renvoie au nom de la classe dans laquelle est déclarée le code.
Voyons la différence sur un exemple :
class Mere {
public static function printSelfStatic(){
// NomDeClasse::class a pour valeur
// la chaine de caractères "NomDeClasse"
echo "self : " . self::class . "\n";
echo "static : " . static::class . "\n";
}
}
class Fille extends Mere {
}
Fille::printSelfStatic();
// Affiche :
// self : Mere
// static : Fille
Méthodes statiques
Une méthode non statique (appelée aussi dynamique) peut se comprendre comme une méthode qui reçoit un
argument $this en supplément des arguments déclarés. Du coup, une méthode
statique est juste une fonction dans laquelle on n’a pas accès à $this.
Utilisation
Les attributs statiques sont utiles pour créer des attributs communs à une
classe. Par exemple, la constante Math::Pi en Java agit un peu comme une
variable globale à la classe Math.
Les attributs statiques servent aussi à coder des comportements de classe. Par exemple, on peut attribuer un identifiant unique à chaque instance d’une classe en stockant dans une variable statique le nombre d’instances.