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!







4 comments
Comments feed for this article
24 agosto 2007 às 14:14
marcelioleal
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.
25 agosto 2007 às 11:40
Marcelo Araujo
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… :-)
31 agosto 2007 às 14:56
Thiago Santos
Muito BOM !!!
eu tava procurando exatamente por isso !
25 dezembro 2007 às 9:06
DGmike
Junto a este, pode também ser usado o __tostring, muito interessante para camarmos o getA