Programmation orientée objet (POO) en PHP

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

Page 3: Instanciation de classes et manipulation d'objets

Toutes les pages

Instancier une classe

La classe est le moule qui sert à fabriquer les objets. Le nombre d'objets que l'on peut créer à l'aide d'une classe est illimité. On appelle l'opération qui consiste à créer un objet instanciation et l'objet ainsi créé peut aussi être appelé instance de classe.

Reprenons l'exemple de la page précédente:
<?php
   class Voiture{
      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()";
      }
   }
?>
J'ai pris le soin d'initialiser l’attribut $couleur et mettre quelque chose dans les deux méthodes accelerer() et ralentir().

Supposons qu'on veut créer un objet du nom de $citadine à partir de la classe Voiture. L'instanciation de la classe ressemblerait à ceci:
<?php
   $citadine = new Voiture();
?>
N'oubliez pas de placer le dollars avant l'identifiant de l'objet.
Nous avons désormais créé l'objet $citadine qui dispose de ses propres attributs $couleur, $puissance, et $vitesse et les méthodes accelerer() et relentir(). Autrement dit, si nous créons un autre objet à partir de la même classe, il disposera également de ses propres attributs et méthodes du même nom. Cependant, même si les identifiants des membres des deux objets créés sont similaires, ils sont tout de même indépendants les uns des autres.

Appel d'attributs et méthodes

Après avoir créé l'objet, on peut désormais accéder à ses membres (attributs et méthodes) par le biais de l'opérateur -> (un tiret suivi d'un chevron fermant).

Voici un exemple:
<?php
   class Voiture{
      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()";
      }
   }

   $citadine = new Voiture();
   
   $citadine -> accelerer();
   echo $citadine -> couleur;
?>
Ce qui donne:
Appel de la méthode accelerer()
Fatal error: Cannot access private property Voiture::$couleur in index.php on line 17
La première ligne de l’exécution est logique. On a pu appeler la méthode accelerer() depuis l'extérieur de la classe car elle est publique. Ce qui affiche le message "Appel de la méthode accelerer()". Nous avons utilisé l'opérateur -> pour désigner la méthode accelerer() de l'objet $citadine (instance de la classe Voiture).

La deuxième ligne par contre affiche l'erreur "Cannot access private property" qui signifie que l'on peut pas accéder à un attribut privé de l'extérieur de la classe, ce qui est tout à fait logique. Si l'attribut $couleur était public, alors le message "Rouge" serait affiché à la place de l'erreur.

Notez que quand on veut accéder à un attribut par le biais de l'opérateur ->, le dollars de celui-ci est exclu.

Classe et instance de classe en vidéo