Tal função foi adicionado no PHP 5.4 para permitir uma maior reutilização de código sem a complexidade adicional que vem permitindo-herança múltipla. Traits são definidas com a palavra-chave traits seguido de um nome e um bloco de código. A convenção de nomenclatura é o mesmo que para as classes, com cada palavra a primeira letra maiúscula. O bloco de código deve conter apenas métodos estáticos e de instância.
trait PrintFunctionality { public function myPrint() { echo 'Hello'; } }
Classes que precisam da funcionalidade que oferece um traits pode incluí-lo com a palavra-chave use seguido pelo nome do traço. Os métodos do traço, então, se comportam como se tivessem sido diretamente definidas nessa classe.
class MyClass { // Inserir o método trait use PrintFunctionality; } $o = new MyClass(); $o->myPrint(); // "Hello"
Uma classe pode usar vários tarits, colocando-os em uma lista separada por vírgula. Da mesma forma, uma característica pode ser constituído a partir de uma ou mais outras características.
Herança e traços
Métodos Trait irá substituir métodos herdados. Da mesma forma, os métodos definidos na classe irá substituir métodos inseridos por um traço.
class MyParent { public function myPrint(){ echo 'Base'; } } class MyChild extends MyParent { // Overrides inherited method use PrintFunctionality; // Overrides trait inserted method public function myPrint(){ echo 'Child'; } } $o = new MyChild(); $o->myPrint(); // "Child"
Diretrizes do Trait
Herança simples, por vezes, obriga o desenvolvedor a fazer uma escolha entre a reutilização de código e uma hierarquia de classes conceitualmente limpa. Para alcançar uma maior reutilização de código, os métodos podem ser movidos perto da raiz da hierarquia de classes. Por outro lado, reforça a limpeza conceitual na hierarquia de classes, muitas vezes, levar à duplicação de código, o que pode causar inconsistências. Traits pode fornecer uma maneira de evitar esta lacuna na herança simples, permitindo a reutilização de código, que é independente da hierarquia de classes.
Links úteis Sobre Traits
Documentação Oficial -> http://php.net/manual/pt_BR/language.oop5.traits.php
Thiago Belem: PHP 5.4 – Traits -> http://blog.thiagobelem.net/php-5-4-traits/
Revista InfoQ: PHP 5.4: Sai o Register Globals, entra o suporte a Traits -> http://www.infoq.com/br/news/2012/03/PHP-5.4