Principe et intérêt du chainage de méthodes en POO PHP
Chainer des méthodes nous permet d’exécuter plusieurs méthodes d’affilée de façon simple et plus rapide, en les écrivant à la suite les unes des autres, « en chaine ».
En pratique, il va suffire d’utiliser l’opérateur d’objet pour chainer différentes méthodes. On écrira quelque chose de la forme $objet->methode1()->methode2()
.
Cependant, pour pouvoir utiliser le chainage de méthodes, il va falloir que nos méthodes chainées retournent notre objet afin de pouvoir exécuter la méthode suivante. Dans le cas contraire, une erreur sera renvoyée.
Le chaînage de méthodes en pratique
Prenons immédiatement un exemple afin de bien comprendre comment fonctionne le chainage de méthodes.
Pour cela, nous allons nous appuyer sur notre classe Utilisateur
créée dans la partie précédente et à laquelle nous allons ajouter deux méthodes.
<?php abstract class Utilisateur{ protected $user_name; protected $user_region; protected $prix_abo; protected $user_pass; protected $x = 0; public const ABONNEMENT = 15; public function __destruct(){ //Du code à exécuter } abstract public function setPrixAbo(); public function getNom(){ echo $this->user_name; } public function getPrixAbo(){ echo $this->prix_abo; } public function plusUn(){ $this->x++; echo '$x vaut ' .$this->x. '<br>'; return $this; } public function moinsUn(){ $this->x--; echo '$x vaut ' .$this->x. '<br>'; return $this; } } ?>
Ici, on commence par initialiser une propriété $x
à zéro puis on crée deux nouvelles méthodes de classe plusUn()
et moinsUn()
dont le rôle est d’ajouter ou d’enlever un à la valeur de $x
puis d’afficher un message avec la nouvelle position de notre objet.
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php require 'classes/utilisateur.class.php'; require 'classes/admin.class.php'; require 'classes/abonne.class.php'; $pierre = new Admin('Pierre', 'abcdef', 'Sud'); $mathilde = new Admin('Math', 123456, 'Nord'); $florian = new Abonne('Flo', 'flotri', 'Est'); $pierre->plusUn()->plusUn()->plusUn()->moinsUn(); ?> <p>Un paragraphe</p> </body> </html>
Ensuite, on utilise l’opérateur objet pour exécuter toutes les méthodes à la suite, d’un seul coup. C’est précisément ce qu’on appelle le chainage de méthodes.
Notez bien l’instruction return $this
à la fin du code de chacune de nos deux méthodes. Cette instruction est ici obligatoire. En effet, comme je l’ai précisé plus haut, vous devez impérativement retourner l’objet en soi pour pouvoir utiliser le chainage de méthodes. Si vous omettez le return $this
vous allez avoir une erreur.
La grande limitation des méthodes chainées est donc qu’on doit retourner l’objet afin que la méthode suivante s’exécute. On ne peut donc pas utiliser nos méthodes pour retourner une quelconque autre valeur puisqu’on ne peut retourner qu’une chose en PHP.