Fluent Interface in PHP

Purpose: To write code that is easily readable like sentences in a natural language (like English).

The Fluent Interface is an Interface Design Pattern that allows us to chain method calls together in a readable and intuitive manner. We must declare methods that return objects from the same class to implement it. As a result, we’ll be able to chain together multiple method calls. The pattern is often used in building QueryBuilder in ORM.

Here is a simple example of a calculator using the method chaining / Fluent Interface

class Calculator
{
    public $value = 0;

    public function Fluently()
    {
          return $this;
    }

    public function Add( $value )
    {
        $this->value = $value;
        return $this;
    }

    public function Subtract($value)
    {
        $this->value -= $value;
        return $this;
    }

    public function Multiply($value)
    {
        $this->value *= $value;
        return $this;
    }

    public function Divide($value)
    {
        $this->value /= $value;
        return $this;
    }

    public function Result()
    {
        return $this;
    }
}

$MyCalculator = new Calculator();
$result = $MyCalculator->Fluently()
                        ->Add(5)
                        ->Multiply(3)
                        ->Subtract(3)
                        ->Divide(4)
                        ->Result();
var_dump($result); // result ((5 * 3) — 3) / 4 = 3

Now if we have to write the above example without Fluent Interface.

class Calculator2
{
    public $value = 0;

    public function Add( $value )
    {
        $this->value += $value;
    }

    public function Subtract($value)
    {
        $this->value -= $value;
    }

    public function Multiply($value)
    {
        $this->value *= $value;
    }

    public function Divide($value)
    {
        $this->value /= $value;
    }

    public function Result()
    {
        return $this;
    }
}

$MyCalculator2 = new Calculator2();

$MyCalculator2->add(5);
$MyCalculator2->Multiply(3);
$MyCalculator2->Subtract(3);
$MyCalculator2->Divide(4);
var_dump($MyCalculator2->Result()); // result ((5 * 3) — 3) / 4 = 3

The code looks cleaner and more readable with Fluent Interface in the previous example than this one.

Conclusion

A fluent interface is a design pattern that can be used to create an easy-to-use and read API. It is often used to provide a simple, intuitive way for developers to interact with it.

Some examples of scenarios where the fluent interface design pattern may be useful include:

  • Creating a QueryBuilder for a database

  • Creating an Interface for a Web Service

  • Creating an Builder Interface for a web form

Reference:

https://designpatternsphp.readthedocs.io/en/latest/Structural/FluentInterface/README.html

https://justgokus.medium.com/what-is-the-fluent-interface-design-pattern-177b9cc93c75

https://programmingdive.com/how-to-use-method-chaining-in-php/