PHP – Enchainer les méthodes d’une classe

Un petit retour avec une astuce du jour. Rien de bien impressionnant, mais qui a toujours son petit effet quand on le fait découvrir, notamment lors de formations. Aujourd’hui je vous explique brièvement comment assurer le chainage ou l’enchainement de plusieurs méthodes d’une classe en PHP. Pour être plus clair, je vais vous montrer comment appeler plusieurs méthodes d’une même classe en une seule ligne de code. Par exemple :

[pastacode lang= »php » manual= »%24unObjet%20%3D%20new%20uneClasse(%24text)%3B%0Aecho%20%24unObjet-%26gt%3Bnettoie()-%26gt%3Bcoupe()-%26gt%3Bprepare()-%26gt%3Baffiche(‘Avec%20un%20titre’)%3B » message= » » highlight= » » provider= »manual »/]

php-logo-elephant

Ceux qui utilisent des Frameworks, comme Zend Framework par exemple, ont déjà rencontré cette façon de faire, et je pense qu’ils peuvent confirmer le coté pratique de la chose.

Mais alors, comment ça se passe au niveau de la classe pour que je puisse moi-même proposer cette manière de programmer ?

Chacune des méthodes utilisées de cette manière doit permettre d’exécuter celle qui suit. Comme vous le savez, dans PHP 5 les méthodes ont la possibilité de retourner des objets, on va donc retourner l’objet courant pour que chaque méthode de la classe puisse retourner l’instance de l’objet courant, autorisant ainsi la méthode suivante à être appelée (via « return $this; »).

Exemple tout simple d’une classe permettant le chainage de méthodes :

[pastacode lang= »php » manual= »%3C%3Fphp%20%2F%2F%20Voici%20une%20classe%20%0A%0Aclass%20uneClasse%7B%20%0A%09%0A%09public%20%24content%3B%20%0A%09%0A%09%2F%2F%20Son%20constructeur%20avec%20un%20contenu%20%C3%A0%20passer%20en%20argument%20%0A%09%0A%09public%20function%20__construct(%24content)%7B%20%0A%09%09%0A%09%09%24this-%3Econtent%20%3D%20%24content%3B%0A%09%0A%09%7D%0A%09%0A%09%2F%2F%20M%C3%A9thode%20qui%20va%20faire%20une%20sorte%20de%20nettoyage%20du%20contenu%0A%09%0A%09public%20function%20nettoie()%7B%0A%09%0A%09%09%24this-%3Econtent%20%3D%20ucfirst(trim(strip_tags(%24this-%3Econtent)))%3B%0A%0A%09%09return%20%24this%3B%0A%0A%09%7D%0A%0A%09%2F%2F%20M%C3%A9thode%20qui%20va%20d%C3%A9couper%20le%20contenu%20(50%20carac.)%20pour%20une%20pr%C3%A9sentation%20par%20exemple%0A%09public%20function%20coupe()%7B%0A%0A%09%09%24this-%3Econtent%20%3D%20substr(%24this-%3Econtent%2C%200%2C%2050).’…’%3B%0A%0A%09%09return%20%24this%3B%0A%0A%09%7D%0A%0A%09%2F%2F%20M%C3%A9thode%20qui%20va%20faire%20une%20sorte%20de%20petite%20mise%20en%20page%20du%20contenu%0A%09public%20function%20prepare()%7B%0A%0A%09%09%2F%2F%20Bien%20s%C3%BBr%2C%20il%20faut%20utiliser%20le%20css%20plut%C3%B4t%20que%20faire%20ainsi%2C%20mais%20on%20est%20dans%20la%20d%C3%A9mo%20l%C3%A0%20%3A)%0A%09%09%24this-%3Econtent%20%3D%20’%3Cp%20style%3D%22border%3A%201px%20%23000%20solid%3B%20padding%3A%205px%3B%22%3E’.%24this-%3Econtent.’%3C%2Fp%3E’%3B%0A%0A%09%09return%20%24this%3B%0A%0A%09%7D%0A%0A%09%2F%2F%20M%C3%A9thode%20qui%20va%20renvoyer%20le%20contenu%20sous%20sa%20forme%20actuelle%20(avec%20un%20titre%20h1%20ou%20non)%0A%09public%20function%20affiche(%24titre%20%3D%20 »)%7B%0A%0A%09%09%2F%2F%20si%20titre%20ou%20non%0A%09%09if(isset(%24titre)%20AND%20%24titre%20!%3D%20 »)%0A%09%09%09return%20’%3Ch1%3E’.%24titre.’%3C%2Fh1%3E’.%24this-%3Econtent%3B%0A%09%09else%0A%09%09%09return%20%24this-%3Econtent%3B%0A%0A%09%7D%0A%0A%7D%0A%0A%24text%20%3D%20’%20et%20voil%C3%A0%20un%20%3Cb%3Econtenu%3C%2Fb%3E%20qui%20risque%20d%5C’%C3%AAtre%20modifi%C3%A9%2C%20j%5C’en%20suis%20s%C3%BBr.%20Mais%20c%5C’est%20pour%20la%20bonne%20cause%20’%3B%0A%0A%24unObjet%20%3D%20new%20uneClasse(%24text)%3B%0Aecho%20%24unObjet-%3Enettoie()-%3Ecoupe()-%3Eprepare()-%3Eaffiche(‘Avec%20un%20titre’)%3B%0A%0A%3F%3E » message= » » highlight= » » provider= »manual »/]

La classe n’a pas de réelle utilité, mais c’est surtout pour vous montrer le principe et la manière de concevoir le chainage de méthode d’une classe en PHP 5.

Pour résumer ce qui se produit avec l’appel de l’exemple ci-dessus :
1 – le texte ($text) est nettoyé de ses balises, espaces en trop et force une majuscule de début de texte (méthode nettoie())
2 – le texte est coupé à 50 caractères et obtient « … » (méthode coupe())
3 – un cadre et un padding va englober ce texte (méthode prepare())
4 – puis le tout va être affiché via la fonction « echo » de php et avec un titre dans une balise h1 (méthode affiche())

ce qui renverra au navigateur :

 

[pastacode lang= »markup » manual= »%3Ch1%3EAvec%20un%20titre%3C%2Fh1%3E%0A%3Cp%20style%3D%22border%3A%201px%20%23000%20solid%3B%20padding%3A%205px%3B%22%3EEt%20voil%C3%A0%20un%20contenu%20qui%20risque%20d’%C3%AAtre%20modifi%C3%A9%2C%20j’e…%3C%2Fp%3E » message= » » highlight= » » provider= »manual »/]

 

Voilà, maintenant vous savez comment ça fonctionne !

Si vous voulez compléter cette article ou si vous avez des questions n’hésitez pas 🙂

Bon code à tous.

Articles qui peuvent vous intéresser :

Author: Franck Pertegas

Share This Post On

6 Comments

  1. Merci du partage de l’astuce, c’est un très bon article ! Bonne continuation.

    Post a Reply
  2. Très utile !
    Merci pour l’article et les explications.

    Post a Reply

Trackbacks/Pingbacks

  1. Créez, redimensionnez et retouchez vos images pour les réseaux sociaux | LudiBlog - [...] PHP – Enchainer les méthodes d’une classe [...]
  2. Tester un site web sur différentes versions d’IE avec IETester | LudiBlog - [...] PHP – Enchainer les méthodes d’une classe [...]

Submit a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *