Encadenar métodos en una clase de PHP

Hoy voy a comentar algo «chulo» que podemos hacer en PHP con un sencillo «truco»:

Imagina que tenemos la clase Coche que tiene varios métodos, entre ellos «lavar()», «encerar()» y secar(). Para usarlos tendíamos que hacer ésto:

$coche = new Coche;
$coche->lavar();
$coche->encerar();
$coche->secar();

¿Pero a que sería genial poder hacer algo así?

$coche = new Coche;
$coche->lavar()->encerar()->secar();

Esto es «encadenar métodos». En PHP, si queremos hacer ésto basta con añadir al final de cada método:

return $this;

Por ejemplo:

Class Coche
{
    public function lavar()
    {
        echo "Coche lavado.\n";
        return $this;
    }
 
    public function encerar()
    {
        echo "Coche encerado.\n";
        return $this;
    }

    public function secar()
    {
        echo "Coche sequito.\n";
        return $this;
    }
}

Y podemos usarlo así:

$coche = new Coche;
$coche->lavar()->encerar()->secar();

Y mostrará:

Coche lavado.
Coche encerado.
Coche sequito.

Y ya que estamos aprovecho para comentar que si tienes que llamar a tus métodos en un determinado orden es una pista de que algo no está bien. Pero eso lo dejo para otro día.

Deja un comentario