À propos de ce tutoriel
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;