Le concept de programmation orientée objet (POO) est une approche de programmation qui implique l’utilisation d’objets pour développer des solutions.
Les objets et les classes :
Une classe est comme un plan, un guide pour construire des objets. Il expose les caractéristiques (des variables définies appelées propriétés ou attributs) et les actions (des fonctions définies que l’on appelle méthodes) que posséderont ses objets. Un objet, quant à lui, naît de l’instanciation d’une classe. Non seulement il hérite des propriétés et méthodes de la classe mère, mais il devient également une entité unique à part entière.
<?php // Définition de la classe Animal class Animal {} // Création de l'objet : instance de la classe Animal $chien = new Animal(); ?>
Propriétés et méthodes :
Comme évoqué précédemment, les propriétés (ou attributs) définissent les caractéristiques. On y stocke des valeurs qui seront ensuite réexploitées tout au long de notre classe. On les place en début de classe. De son côté, une méthode permettra de gérer l’affichage, un traitement spécifique (par exemple : validation des données d’un formulaire, interroger une base de données, réceptionner les données transmises par un SGBD, etc.)
<?php // Définition de la classe Animal class Animal { // Propriété publique public $espece; // Méthode pour afficher l'espèce de l'animal public function afficherEspece() { echo "Espèce: " . $this->espece . "\n"; } } // Création de l'objet : instance de la classe Animal $monAnimal = new Animal(); // On définit l'espèce de l'animal en passant par la propriété $monAnimal->espece = "Chat"; // Ici, on affiche la phrase en passant par la méthode $monAnimal->afficherEspece(); ?>
La métavariable $this
Il s’agit d’une référence à l’objet courant, c’est-à-dire à l’instance dans laquelle elle est déclarée. Cette métavariable permet d’accéder aux propriétés et aux méthodes à l’intérieur de la classe.
Accès aux propriétés :
class Voiture { public $couleur; public function definirCouleur($couleur) { $this->couleur = $couleur; // Utilisation de $this pour accéder à la propriété 'couleur' de l'objet } }
Accès aux méthodes :
<?php class Lampe { public $etat = false; // false signifie éteinte, true signifie allumée // Méthode pour allumer la lampe public function allumer() { $this->etat = true; $this->afficherEtat(); // Appel de la méthode afficherEtat avec $this } // Méthode pour éteindre la lampe public function eteindre() { $this->etat = false; $this->afficherEtat(); // Appel de la méthode afficherEtat avec $this } // Méthode pour afficher l'état de la lampe public function afficherEtat() { echo "La lampe est " . ($this->etat ? "allumée" : "éteinte") . ".\n"; } } // Création d'une instance de Lampe $maLampe = new Lampe(); // Utilisation des méthodes $maLampe->allumer(); // Allume la lampe et affiche l'état $maLampe->eteindre(); // Éteint la lampe et affiche l'état ?>
$this permet donc de réutiliser les méthodes pour différents objets, chaque objet utilisant ses propres données. Cela clarifie le code en indiquant clairement que l’on accède aux propriétés ou méthodes de l’objet courant.
Le constructeur
Il s’agit d’une méthode associée à une classe. Cette méthode est automatiquement appelée à chaque nouvelle instance. On l’exploite généralement pour initialiser des valeurs à des propriétés de l’objet créé mais aussi afin d’exécuter des tâches de configuration.
<?php // Définition de la classe Voiture class Voiture { // Propriétés de la classe private string $marque; private string $modele; // Constructeur de la classe avec initialisation des propriétés public function __construct(string $marque, string $modele) { $this->marque = $marque; $this->modele = $modele; } // Méthode pour afficher les informations de la voiture public function afficherInfo() { echo "Marque: " . $this->marque . ", Modèle: " . $this->modele . "\n"; } } // 2 objets sont créés ci-dessous. Ce sont des instances de la classe Voiture $voiture1 = new Voiture("Fiat", "Punto"); $voiture2 = new Voiture("Renault", "Twingo"); // Appel de la méthode afficherInfo sur chaque instance $voiture1->afficherInfo(); $voiture2->afficherInfo(); ?>