PHP - Criando uma classe que concatena métodos



É comum em frameworks ou bibliotecas aplicarmos métodos em cadeia para modificar um dado conteúdo. A ideia deste tipo de classe é evitar criar variáveis temporárias para guardar o resultado de um método para depois inseri-lo em outro a fim de aplicar uma nova modificação. Com o encadeamento de métodos o retorno de cada um é lido pelo seguinte automaticamente.

Para isso existe um truque: os retornos dentro de cada método. Vamos ver um exemplo.

 Class Sequencia  
           {  
                public $retorno;  
                public function primeiro($var)  
                {  
                     $this->retorno .= " Primeiro {$var}:";  
                     return $this;  
                }  
                public function segundo($var)  
                {  
                     $this->retorno .= " Segundo {$var}:";  
                     return $this;  
                }  
           }  
           $seq = new Sequencia;  
           $seq->primeiro('inserido')->segundo('Texto');  
           var_dump($seq);  

O retorno ficará assim:

 object(Sequencia)#1 (1) { ["retorno"]=> string(34) " Primeiro inserido: Segundo Texto:" }  

Se invertermos a sequência de métodos:

 $seq = new Sequencia;  
 $seq->segundo('Texto')->primeiro('inserido');  
 var_dump($seq);  

O retorno ficará assim:

 object(Sequencia)#1 (1) { ["retorno"]=> string(34) " Segundo Texto: Primeiro inserido:" }  

Para que os métodos encadeados funcionem devemos aplicar a cada um retorno do objeto referência da classe $this.

O retorno de $this traz consigo todo o conteúdo do objeto no estado atual. Assim seu estado modificado está pronto para ser enviado e reconhecido pelo próximo método.

Uma solução muito bacana e que será bem útil em projetos que exigem a utilização de vários métodos em sequência caso seja desejado um processamento contínuo ou o aprofundamento na análise de um dado.

Por hoje é isso
Abraços

Comentários

Postagens mais visitadas deste blog

PHP - Utilizando proxy e CURL para acessar servidores ou sites

MySQL - Cálculo de período de tempo entre duas datas com TIMESTAMPDIFF

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()