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.