Traits são mecanismos que ajudam (e muito) a reutilização de código, e servem perfeitamente para resolver o problema da falta de herança múltipla.
Suponhamos que você tenha duas ou mais classes que precisam usar um método/comportamento em comum, antes da versão 5.4 você faria algo do tipo:
Primeiro temos nossa classe Log, que serviria pra salvar mensagens de log (imagine uma classe completa, que faça algo de útil):
E agora você tem outras classes que fazem uso dessa funcionalidade (salvar logs), mas essas classes não podem (e nem deveriam) estender Log, então você faria algo do tipo:
Mais uma vez, o conteúdo ou métodos dessas classes não importa.. o que importa aqui é o trabalho que temos para poder usar o Log::log() para salvar mensagens de log.
Já a partir da versão 5.4, podemos transformar a classe Log numa Trait:
E manter o comportamento das nossas classes, de forma bem mais simples:
Podemos usar o método log() diretamente (sem a necessidade de instanciar um objeto de Log) pois nossas classes adquiriram as características (métodos e atributos) de Log! 🙂
Conclusão
Traits são de fato recursos bem interessantes e muitos frameworks estão se adaptando à esse poderoso recurso.
Documentação oficial: php.net/traits
É isso… Por hoje é só pessoal.