La Programmation Orientée Objet (POO) est devenue le paradigme dominant dans l'écosystème PHP moderne, transformant ce qui était autrefois un langage de script en une plateforme robuste pour le développement d'applications complexes et à grande échelle. Bien que des notions de POO aient été introduites dès PHP 3, c'est la réécriture complète du noyau de PHP 5 qui a marqué un tournant décisif. Cette évolution a doté PHP d'un modèle objet puissant, le positionnant comme un langage de premier choix pour les architectures logicielles professionnelles.
L'adoption de l'approche orientée objet offre des avantages stratégiques significatifs qui améliorent la qualité, la scalabilité et la durée de vie d'un projet.
De plus, la POO facilite grandement la ré-ingénierie logicielle (communément appelée refactoring). Ce processus critique, qui consiste à restructurer le code existant sans changer son comportement externe, est plus simple et plus sûr lorsque le code est encapsulé dans des objets bien définis.
Ce guide explorera la terminologie et les concepts fondamentaux de la POO en PHP, en commençant par les briques de base que sont les classes et les objets, pour ensuite aborder des sujets plus avancés comme l'héritage, l'encapsulation, l'abstraction et la gestion des erreurs.
Les classes et les objets sont les deux piliers sur lesquels repose toute la programmation orientée objet. Une classe peut être vue comme un plan ou un modèle qui définit la structure et le comportement d'une entité. Elle spécifie les types de données (appelées propriétés) que l'entité peut contenir et les actions (appelées méthodes) qu'elle peut effectuer. Un objet, quant à lui, est une instance concrète de cette classe, une matérialisation du plan avec ses propres données.
EmailerPrenons l'exemple d'une classe conçue pour envoyer des e-mails. Ce plan, nommé Emailer, définit tout ce qui est nécessaire pour accomplir cette tâche.
<?php
// class.emailer.php
class Emailer{
protected $sender, $recipients, $subject, $body;
function __construct($sender, $subject, $body) {
$this->sender = $sender;
$this->subject = $subject;
$this->body = $body;
$this->recipients = array();
}
public function addRecipients($recipient) {
array_push($this->recipients, $recipient);
}
public function sendEmail() {
foreach ($this->recipients as $recipient) {
$result = mail($recipient, $this->subject, $this->body, "From:
{$this->sender}\\r\\n");
if ($result) echo "Mail successfully sent to {$recipient}<br/>";
}
}
function __destruct(){
echo " Object Destroyed.";
}
}
Analysons la structure de cette classe pour comprendre ses différents composants :
properties) : Ce sont les variables qui stockent l'état d'un objet. Dans la classe Emailer, les propriétés $sender, $recipients, $subject et $body sont déclarées avec le modificateur protected, ce qui signifie qu'elles sont accessibles uniquement depuis la classe elle-même et ses éventuelles classes enfants.__construct) : Il s'agit d'une "méthode magique" automatiquement appelée lors de la création d'un nouvel objet avec le mot-clé new. Son rôle est d'initialiser les propriétés de l'objet. Ici, il initialise l'expéditeur, le sujet, le corps du message et la liste des destinataires.