Fluent

Résumé Support

Le principe du design pattern Fluent est de permettre d'écrire du code de manière plus lisible comme on le dirait à l'oral. C'est une méthode que l'on est habitué à retrouver si on utilise javascript. Le but est avant tout de pouvoir "chainer" les méthodes les unes à la suite des autres.

Un exemple : QueryBuilder

Pour mieux comprendre de quoi il s'agit je vous propose un petit exemple simple : un QueryBuilder. Le but est ensuite de pouvoir générer des requêtes simplement

$query = new QueryBuilder(); $requete = $query->select('id', 'titre', 'contenu')->from('articles', 'Post')->where('Post.category_id = 1')->where('Post.date > NOW()');

Pour arriver à rendre les méthodes chainable il suffit tout simplement de retourner l'instance courante à chaque fin de méthode.

<?php class QueryBuilder{ private $fields = []; private $conditions = []; private $from = []; public function select(){ $this->fields = func_get_args(); return $this; } public function where(){ foreach(func_get_args() as $arg){ $this->conditions[] = $arg; } return $this; } public function from($table, $alias = null){ if(is_null($alias)){ $this->from[] = $table; }else{ $this->from[] = "$table AS $alias"; } return $this; } public function __toString(){ return 'SELECT '. implode(', ', $this->fields) . ' FROM ' . implode(', ', $this->from) . ' WHERE ' . implode(' AND ', $this->conditions); } }

La clef réside ici dans l'utilisation du

return $this;