Ahora que hemos visto la herencia y las interfaces es el momento de hablar de los Traits. Como ya sabemos podemos extender las funcionalidades de una clase gracias a la herencia, pero PHP es un lenguaje que no permite la herencia de múltiples clases, esto quiere decir que una clase “hija” no puede heredar de más de una clase “padre” a la vez.

Para lograr simular algo parecido a la herencia múltiple existen los Traits. La forma de declararlos es similar a como declaramos una clase, salvo porque un Trait no puede ser instanciado, como una interfaz, pero a diferencia de la interfaz sus métodos si contienen cuerpo, veamos un ejemplo:

trait MiTrait { 
    public function metodoUno(){ 
        echo "Método uno. "; 
    } 
    public function metodoDos(){ 
        echo "Método dos. "; 
    } 
}

Para usarlos en una clase solo hay que usar la instrucción use después de declarar la clase:

class MiClase{ 
    use MiTrait; 
    public function __construct(){ 
        $this->metodoUno(); 
    } 
}

Tambien podemos definir métodos abstractos de la misma forma que se definen en una clase abstracta, y así obligar a definir ese método en la clase que use el trait:

class MiClase{ 
    use MiTrait; 
    public function __construct(){ 
        $this->metodoUno(); 
    }   

    abstract public metodoAbstracto(); 
}

Pero la potencia de los traits va mas allá, ya que php nos permite usar varios dentro de una misma clase separando sus nombres mediante una coma “,”:

class MiClase{ 
    use MiTrait , MiTraitDos; 
    public function __construct(){ 
        $this->metodoUno();
    } 
}