l est possible de programmer en PHP de nombreuses façons différentes. C’est ce qui fait sa force : on peut en effet commencer à créer ses premières pages basiques en PHP avec très peu de connaissances au départ, mais il est aussi possible de programmer avec des outils avancés, plus complexes mais aussi plus solides et plus flexibles. La programmation orientée objet est une technique de programmation célèbre qui existe depuis des années maintenant. PHP ne l’a pas inventée : d’autres langages comme le C++, Java et Python l’utilisaient bien avant lui. La programmation orientée objet, que nous abrègerons POO, n’est pas le Saint Graal : elle ne va pas améliorer subitement la qualité de votre site comme par magie. En revanche, elle va vous aider à mieux organiser votre code, à le préparer à de futures évolutions et à rendre certaines portions réutilisables pour gagner en temps et en clarté. C’est pour cela que les développeurs professionnels l’utilisent dans la plupart de leurs projets.
- Qu’est-ce qu’un objet ?
La programmation orientée objet ne va pas instantanément révolutionner votre site web, contrairement à ce que beaucoup semblent penser. En fait, il est même probable que cela vous semble un peu inutile au début et que vous vous disiez « O.K., mais je n’en vois pas l’intérêt, ça marchait aussi bien avant ». Certaines choses vous paraîtront aussi un peu abstraites, vous ne verrez peut-être pas bien comment mettre tout cela en pratique sur votre site. C’est parfaitement normal ; lorsqu’on apprend la programmation orientée objet, il y a un petit temps d’adaptation pendant lequel on ne voit pas le rapport entre la théorie et la pratique. Prenez quand même le temps de tout lire et de faire l’effort de comprendre ce qui est expliqué. Petit à petit, en pratiquant, vous découvrirez que cela vous permet de mieux maîtriser votre code PHP au fur et à mesure qu’il grossit, et vous verrez par la suite tout l’intérêt de ce que vous aurez appris. Ils sont beaux, ils sont frais mes objets.
Nous allons commencer par définir ce qu’on appelle un objet en programmation. Alors, de quoi s’agit-il ? En effet, nous sommes entourés d’objets. En fait, tout ce que nous connaissons (ou presque) peut être considéré comme un objet. L’idée de la programmation orientée objet, c’est de manipuler dans son code source des éléments que l’on appelle des « objets »
Ni l’un, ni l’autre. C’est un nouvel élément en programmation. Pour être plus précis, un objet c’est… un mélange de plusieurs variables et fonctions. Allez ne faites pas cette tête-là, vous allez découvrir tout cela par la suite.
Pour éviter que ce que je vous raconte ressemble à un traité d’art moderne conceptuel, on va imaginer ensemble ce qu’est un objet à l’aide de plusieurs schémas concrets. Imaginez qu’un programmeur décide un jour de créer une section de son site web qui permette d’ajouter des membres, de les placer dans des groupes (administrateurs, modérateurs…), de les bannir, de les supprimer… Le code est complexe : il a besoin de créer plusieurs fonctions qui s’appellent entre elles, des variables pour mémoriser le nom du membre, sa date d’inscription, son groupe, etc. Il met du temps à écrire ce code : c’est un peu compliqué, mais il y arrive. Au final, le code qu’il a écrit est composé de plusieurs fonctions et variables. Quand on regarde ça pour la première fois, ça ressemble à une expérience de savant fou à laquelle on ne comprend rien (figure suivante).
Notre code ressemble à une expérience de savant fou incompréhensible
Ce programmeur est content de son code et veut le distribuer sur Internet pour que tout le monde puisse créer sa section membres sur son site sans avoir à tout recoder. Seulement voilà : à moins d’être un expert en chimie certifié, vous allez mettre pas mal de temps avant de comprendre comment tout ce bazar fonctionne.
Quelle fonction appeler en premier ? Quelles valeurs envoyer à quelle fonction pour créer le membre ?
C’est là que notre ami programmeur pense à nous. Il conçoit son code de manière orientée objet. Cela signifie qu’il place tout son bazar chimique à l’intérieur d’un simple cube. Ce cube est ce qu’on appelle un objet, comme sur la figure suivante.
Le code est placé dans une boîte qui en simplifie l’accès
Ici, une partie du cube a été volontairement mise en transparence pour vous montrer que nos fioles chimiques sont bien situées à l’intérieur du cube. Mais en réalité, le cube est complètement opaque, on ne voit rien de ce qu’il y a à l’intérieur (figure suivante).
Ce cube contient toutes les fonctions et les variables (nos fioles de chimie), mais il les masque à l’utilisateur. Au lieu d’avoir des tonnes de tubes et de fioles chimiques dont il faut comprendre le fonctionnement, on nous propose juste quelques boutons sur la face avant du cube : un bouton « créer un membre », un bouton « bannir », etc. L’utilisateur n’a plus qu’à se servir des boutons du cube et n’a plus besoin de se soucier de tout ce qui se passe à l’intérieur.
Pour l’utilisateur, c’est donc complètement simplifié. En clair : programmer de manière orientée objet, c’est créer du code source (peut-être complexe), mais que l’on masque en le plaçant à l’intérieur d’un cube (un objet) à travers lequel on ne voit rien. Pour le programmeur qui va l’utiliser, travailler avec un objet est donc beaucoup plus simple qu’avant : il a juste à appuyer sur des boutons et n’a pas besoin d’être diplômé en chimie pour s’en servir. Bien sûr, c’est une image, mais c’est ce qu’il faut comprendre et retenir pour le moment.
Vous vous souvenez de PDO ? Ne me dites pas que vous avez déjà oublié. PDO est une extension de PHP et elle est codée en orienté objet. C’est ce qui explique que son mode d’emploi était légèrement différent des fonctions auxquelles nous étions habitués. Je vous avais promis de vous expliquer plus en détail comment fonctionnait PDO, c’est maintenant l’occasion idéale ! Souvenez-vous de cette ligne qui nous permettait de nous connecter à la base de données :
<?php
$dsn = 'mysql:host=127.0.0.1;dbname=crud-php-stage;charset=utf8';
$user = 'root';
$pass = '';
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
} catch(PDOException $error ) {
echo 'Une erreur est survenue : '.$error->getMessage();
}
En fait, $bdd n’est pas une variable mais un objet. On crée un objet à l’aide de la commande new suivie du nom de la classe.
La classe est un plan, une description de l’objet. Imaginez qu’il s’agit par exemple des plans de construction d’une maison.
L’objet est une instance de la classe, c’est-à-dire une application concrète du plan. Pour reprendre l’exemple précédent, l’objet est la maison. On peut créer plusieurs maisons basées sur un plan de construction. On peut donc créer plusieurs objets à partir d’une classe. La figure suivante schématise ce que je viens d’exposer.
Par conséquent, si l’on reprend le code précédent, vous aurez deviné que : $pdo est l’objet ; PDO est le nom de la classe sur laquelle est basé l’objet. Un objet est, je vous le disais plus tôt, un mélange de fonctions et de variables. Lorsqu’on
<?php
$pdo->query();
$pdo->prepare();
$pdo->execute();
?>
Cela signifie : exécuter la fonction query() de mon objet $pdo, puis la fonction prepare(),
puis la fonction execute(), etc. La flèche -> est propre aux objets. Il faut donc comprendre que l’on
exécute la fonction query() de l’objet $bdd qui représente la connexion à la base de données.
Autre exemple, imaginaire cette fois, pour être sûr que vous compreniez bien :