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.