Recentemente estive estudando como funciona a autenticação do Laravel 5.4 e sempre via "use RegistersUsers" que se relacionava a uma trait e não a uma classe e me perguntava, o que trait?
Visão Geral
Se você tem exposição à programação orientada a objetos, então você terá sido introduzido no conceito de classes e interfaces abstratas. Um "Trait" é semelhante a uma classe abstrata, na medida em que não pode ser instanciado por conta própria, mas contém métodos que podem ser usados em uma classe concreta. Os traços foram introduzidos no PHP na versão 5.4 e são usados extensivamente no Laravel Framework. Eles são ideais para reduzir o efeito limitante da herança única, permitindo a exposição de métodos como se estivessem definidos na classe de chamada. A definição exata do site PHP define traços como tal:
"Os traços são um mecanismo para reutilização de código em linguagens de herança única, como o PHP. Um traço destina-se a reduzir algumas limitações da herança única, permitindo que um desenvolvedor reutilize conjuntos de métodos livremente em várias classes independentes que vivem em hierarquias de classes diferentes. A semântica da combinação de Traços e aulas é definida de uma forma que reduz a complexidade e evita os problemas típicos associados à herança múltipla.
Um traço é semelhante a uma classe, mas apenas destinado a agrupar a funcionalidade de uma forma fina e consistente. Não é possível instanciar um traço por conta própria. É uma adição à herança tradicional e permite a composição horizontal do comportamento; isto é, a aplicação dos membros da turma sem necessidade de herança ".
Exemplo de um trait
Criar um traço é como definir uma classe, o seguinte exemplo simples (excluindo comentários) mostra um único arquivo com uma característica que possui 2 métodos:
namespace App\Traits;
trait ExemploTeste
{
public function printThis()
{
echo "executando uma Trait de Chocolate";
dd($this);
}
public function anotherMethod()
{
echo "Trait De outro método da felicidade o/";
}
}
Nosso exemplo se parece com uma definição de classe, exceto que usamos a palavra-chave "trace", não há construtor, pois não pode ser instanciado (como uma classe abstrata). Ele usa um espaço de nome de App\Traits para dar-lhe um agrupamento claro (você pode usar o que quiser aqui). Se você precisa acessar o código em outros espaços de nome, basta incluir a declaração "use" (veja o exemplo abaixo) e criar e chamar o (s) método (s) conforme necessário.
Dentro do arquivo, os nomes das funções devem ser únicos e se eles entrarem em conflito com métodos existentes, a seguinte precedência entrará em vigor:
- Um membro herdado de uma classe base é substituído por um membro inserido por um trace.
- Os membros da classe atual substituem os métodos Trait.
Armazenando Traços
Por conveniência criei um diretório em "app" chamado "Traits", e coloquei meus arquivos PHP personalizados lá. Cada arquivo usa o nome do Trait para correlação lógica. Ao usar um espaço de nome de "App\Traits" em cada arquivo, o Framework foi capaz de localizar meus arquivos quando eu usá-los (use) em outro arquivo.Exemplo de código usando o trait:
/**
* \class AdminLoginJob
* @date 2017-06-27
*/
namespace App\Jobs;
use App\Jobs\Job;
use Illuminate\Contracts\Bus\SelfHandling;
use App\Traits\ExampleCode;
/**
* Breve Exemplo de código usando um trace em um processor do Laravel
*/
class AdminLoginJob extends Job implements SelfHandling
{
use ExampleCode;
/**
* Trate de chamada para imprimir algo. Observe o uso de "$this".
*
* @return void
*/
public function __construct()
{
$this->printThis();
}
Conclusão
Eu após começar a trabalhar com o com POO e Laravel, estava sentido falta de formas de centralizar todas as funções comuns que tenho e costumo usar, (funções de tratamento de datas, strings e etc.) e entender o uso do trait sanou totalmente essa necessidade. Utilizar o trait facilita muito a reutilização de código.Referencias
https://www.conetix.com.au/blog/simple-guide-using-traits-laravel-5http://php.net/manual/pt_BR/language.oop5.traits.php
Se vocês gostaram desse Post não deixe de compartilhar com seus amigos!!!
E para não perder nenhuma novidade nos sigam nas redes sociais:
Twitter: @Bulfaitelo
Facebook: Bulfaitelo Project
Blogger: Bulfaitelo Project