Programmation orientée objet en PHP

Auteur: Mohamed CHINY Durée necessaire pour le cours de Programmation orientée objet en PHP Niveau recommandé pour le cours de Programmation orientée objet en PHP Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz non disponibles pour ce cours

Page 5: Accès statique aux membres de la classe

Toutes les pages

Opérateur de résolution de portée

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, ont 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.

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.

Exemple:
<?php
   class Voiture{
      const ROUES=4;
      private $couleur="Rouge";
      private $puissance;
      private $vitesse;
      public function accelerer(){
         echo "Appel de la méthode accelerer()";
      }
      public function ralentir(){
         echo "Appel de la méthode ralentir()";
      }
   }
?>
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 ::.

Si par exemple on exécute le code suivant après la définition de la classe Voiture:
<?php
   echo "Nombre de roues: ".Voiture::ROUES;
?>
on obtient:
Nombre de roues: 4

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:
<?php
   class Voiture{
      private static $roues=4;
      public static function message(){
         echo "Il s'agit d'une voiture.<br />";
         echo "Elle a ".Voiture::$roues." roues.";
      }
   }
   Voiture::message();
?>
Donne:
Il s'agit d'une voiture.
Elle a 4 roues.
Lors d'un appel statique d'un attribut, celui-ci conserve le dollars.
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:
<?php
   class Voiture{
      private static $roues=4;
      public static function message(){
         echo "Il s'agit d'une voiture.<br />";
         echo "Elle a ".self::$roues." roues.";
      }
   }
   Voiture::message();
?>
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.