PHP
PHP
¡INSCRÍBETE A CUALQUIER CURSO CON UN 50% DE DESCUENTO PARA NUEVOS CLIENTES!

En PHP5 tenemos los traits, un mecanismo de reutilización de código en lenguajes de herencia simple, como PHP.

Según el manual de php sobre traits tenemos lo siguiente.

El objetivo de un trait es el de reducir las limitaciones propias de la herencia simple permitiendo que los desarrolladores reutilicen a voluntad conjuntos de métodos sobre varias clases independientes y pertenecientes a clases jerárquicas distintas. La semántica a la hora combinar Traits y clases se define de tal manera que reduzca su complejidad y se eviten los problemas típicos asociados a la herencia múltiple y a los Mixins.

Un Trait es similar 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.

Así que tenemos lo siguiente:

  • Un trait es similar a una clase pero no puede ser instanciado.
  • Puede tener algo parecido a las interfaces, pero realmente no tienen nada que ver, ya que una interfaz simplemente es un contrato que hay que firmar para poder ser utilizado y sus funciones no tienen lógica alguna.
  • Pueden implementar funciones asociadas a cualquier interfaz de la clase que los utiliza.
  • Pueden tener propiedad utilizando los ámbitos de visibilidad de la POO.
  • Una clase puede utilizar tantos Traits como necesite.

Dicho lo anterior, veamos la sintaxis más sencilla de un Trait y cómo utilizarlo.


Así de simple es declarar un Trait, utilizarlo dentro de una clase y llamar a una función.

Veamos otro ejemplo.


Utilizar múltiples traits en la misma clase.


Traits utilizando interfaces a través de la clase que lo utiliza.


Rizando el rizo.


Con eso ya podemos empezar a utilizar traits en nuestras aplicaciones para hacerlas mejores y fáciles de reutilizar y mantener.