PHP: Interfaces Fluentes

Palavras-chave: PHP 5, fluent interfaces, object chaining

Algumas práticas podem melhorar a legibilidade de um código, e uma delas é o uso de interfaces fluentes ou encadeamento de objetos.

Normalmente, a maioria dos métodos setter de um objeto apresentam retorno do tipo void. Mas, em um objeto com interface fluente, os setters irão retornar um objeto, de modo que se possa encadeá-lo.

Vale lembrar que esta prática é apenas suportada no PHP 5, visto que o PHP 4 não suporta referência direta aos objetos retornados por métodos.

Vejamos o exemplo:

class A {

      private $_n = '';

      public function setA($n)
      {
            $this->_n = $n;
            return $this;
      }

      public function reverse()
      {
            $this->_n = strrev($this->_n);
            return $this;
      }

      public function getA()
      {
            return  $this->_n;
      }
}

$a = new A();

print $a->setA("codare")->reverse()->getA();

# Retorna: eradoc

?>

E lembre-se: interfaces fluentes requerem situações fluentes!

This entry was posted in PHP. Bookmark the permalink.

4 Responses to PHP: Interfaces Fluentes

  1. marcelioleal says:

    Interessante essa prática.

    Tú achas que isso é interessante pra sistemas de informações?
    Gera algum overhead?

    Muito bom o blog, achei vindo do link do Pablo.

  2. Marcello,

    Em se tratando de overhead, acho que não…O interessante desta abordagem é melhorar a legibilidade e a transparência do uso de objetos (quando estes são mais complexos e apresentam um comportamento encadeado). Irei criar um profiling de classes com comportamento fluente versus classes não-fluentes só para ver a performance… :-)

  3. Muito BOM !!!
    eu tava procurando exatamente por isso !

  4. DGmike says:

    Junto a este, pode também ser usado o __tostring, muito interessante para camarmos o getA

Leave a Reply

Your email address will not be published. Required fields are marked *