Inicio > PHP > Traits

TRAITS

21/07/2016PHP

 

Hoy he aprendido un concepto nuevo en php que es el concepto de traits.Los traits son un mecanismo para reutilizar código en un lenguaje que no soporta la herencia múltiple. Los traits reducen las limitaciones de la herencia simple, permitiendo a los desarrolladores reutilizar un conjunto de métodos en varias clases independientes de jerarquías. La semántica para combinar los traits y las clases es definida de tal manera que la complejidad es reducida y se evitam los problemas típicos asociados con la herencia múltiple.
En otras palabras se puede decir que un trait es igual a una clase, pero con el único objetivo de agrupar funcionalidades muy específicas y de una manera coherente. No se puede instanciar directamente un trait. Es por tanto un añadido a la herencia tradicional, y habilita la composición horizontal de comportamientos; es decir, permite combinar miembros de clases sin tener que usar herencia.
Cuando dos traits han definido un método con el mismo nombre y luego se necesita utilizar ambos en la misma clase, surge un conflicto de nombres.Veámoslos con un ejemplo:

// Asumimos que los trait A y B tienen un método hello() definido
class Test {
use A, B {
B::hello insteadof A;
}
}
// La clase Test tendrá implementado el método "hello" del trait B

Este problema se soluciona usando el nuevo operador insteadof que excluye un método en favor del otro. Y si hubiera necesidad de utilizar las implementaciones de ambos métodos en la misma clase, se podría utilizar un alias:
class Test {
use A, B {
B::hello insteadof A;
A::hello as helloA;
}
}
// La clase Test tendrá implementado el método "hello" y "helloA"

As es un operador adicional que también podría para cambiar la visibilidad de un método y otros modificadores.