4- Constantes de classe, attributs et méthodes statiques
Nous avons vu précédemment que les attributs et méthodes définis dans une classe appartiennent en fait à l’objet qui sera l’instance de cette classe. On s’est donc servi de l’opérateur -> pour désigner un membre à partir de l’objet créé.
Cependant, on peut spécifier les membres qui appartiennent à la classe et non à l’objet. On appelle ces membres, attributs et méthodes statiques. Pour y accéder on se sert de l’opérateur de résolution statique :: appelé simplement double deux points.
Membres statiques d’une classe: constantes de classe, attributs et méthodes statiques
- Constantes de classe
Une constante de classe est un élément statique par défaut. Son rôle est le même que celui d’une constante classique déclarée à l’aide de la fonction define (). Sa valeur est inchangée et elle appartient à la classe dans laquelle est-elle évoquée et non à l’objet qui constitue l’instance de classe.
Pour définir une constante on utilise le mot clé const suivi du nom de la constante à laquelle on affecte la valeur souhaitée. Par convention l’identifiant de la constante est déclaré en majuscule.

La constante de classe peut être appelée de l’intérieur comme de l’extérieur de la classe grâce à l’opérateur de résolution de portée ::

- Attributs et méthodes statiques
Les attributs et méthodes statiques appartiennent à la classe et non à l’objet. Par conséquent on ne peut pas y accéder par l’opérateur –> mais plutôt par l’opérateur de résolution de portée :: précédé par le nom de la classe dans laquelle ils sont définis.
Pour spécifier si un membre est statique on déclare le mot clé static après la visibilité. Par exemple:


Vous avez remarqué que nous avons appelé lé méthode statique message() de l’extérieur de la classe, il est dont évident de déclarer le nom de la classe (Voiture) avant l’opérateur de résolution de portée. En revanche, l’attribut statique $roues a été appelé de l’intérieur de la classe. Là aussi on a mis le nom de la classe avant l’opérateur de résolution de portée. Néanmoins, on aurait pu mettre le mot clé self qui désigne la classe courante.
L’exemple précédent peut donc devenir:

Généralement, si on veut faire un appel statique (d’une constante, attribut ou méthode) à l’intérieur de la classe, il est préférable de mettre le mot clé self au lieu du nom de la classe elle même. Par contre, à l’extérieur de la classe il faut mettre le nom de celle ci avant l’opérateur de résolution de portée.