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;