Heranças Horizontais com Traits em PHP:
O primeiro estudo do meu Medium, talvez seja um assunto um pouco mais avançado, mas decidi começar por ele pois é o assunto que estou estudando no momento. Não postarei nada com uma ordem cronológica exata, quem sabe depois eu volte ensinando um if else qualquer.
Assim como descrito no meu primeiro post, não sou nenhum profissional em programação. Apenas estou usando essa forma como um estudo e fixação de conteúdo. E, quem sabe, também ajude alguém que está precisando! Se encontrar alguma inconsistência no texto, só me dar um toque!
OBS: Presumo que você já tenha conhecimento em orientação a objetos no PHP.
O que é uma trait? Considero como um mecanismo pra quando precisamos entrar naquela de CTRL + C e V de trechos de códigos, mas que estão em classes diferentes.
Mas, antes de entrar direto no assunto, é importante entender a diferença de herança e traits:
Uma herança, como o próprio nome diz, é algo que herda características de outro algo. Há quem diga que a herança é sobre reusar um código, mas na verdade o reuso é a consequência da herança feita.
Já as Traits, são estritamente para o reuso de código!
Mas chega de blablabla, vamos botar a mão na massa, dá uma olhadinha nesse código:
Bom, aqui temos duas classes diferentes (não vamos entrar no mérito de que deveria ser arquivos diferentes por classe, etc. Foco no principal). Nas duas classes, temos o mesmo método, coloquei um método qualquer para exemplificar.
Vamos botar a cachola pra funcionar… É o mesmo método nas duas classes, não daria pra usar herança e herdar esses métodos de uma classe mãe?
Até daria, mas não iremos fazer isso, somos Homo sapiens sapiens! Como falei previamente, o uso de herança, faz sentido quando uma classe… Bom, herda a outra. Entraria naquela questão: a classe X faz parte de Y? A classe “Funcionario” herda a classe “Pessoa” (Ou melhor, um funcionário É uma pessoa)?
Nesse meu exemplo, um só herdaria o outro se essa pessoa fosse um Transformer 😅
Então, entra o uso das Traits:
A declaração da Trait é simples, ao invés de “class”, usamos “trait”:
Então é isso? Terminamos por aqui?
Claro que não! Os Homo Sapiens não evoluíram atoa!
Para utilizarmos essa belezinha basta usarmos a palavra ‘use’:
Em seguida, você poderá instanciar a classe e usar o método ‘funcaoOutput’ que está declarado em uma trait:
E o output será assim:
“Olá! O método foi chamado com a mensagem: Olá mundo!”
Vale a observação que uma trait não pode ser instanciada! E em uma classe você pode importar quantas traits quiser, basta separar com uma vírgula ou colocar em diferentes linhas:
Então, só recapitulando o que fizemos: criamos uma Trait chamada ‘test’, onde tem uma função ‘funcaoOutput’ que imprime um texto junto com o parâmetro recebido. Depois de ter importado ela dentro da nossa classe ‘People’, instanciamos ela fora da classe e chamamos o método da trait!
Show né?
Tem alguns outros detalhes, como por exemplo, ser possível colocar um alias na trait quando importamos ela.
Recomendo, se quiser ver mais sobre esse assunto, dá uma lida nesse artigo que encontrei: bate aqui
Mas, por hora é isso, obrigado pra quem veio até aqui, espero que eu tenha sido claro na explicação! Até a próxima!