Hola. ¿Cómo están? Bienvenidos continuando con el curso de PHP, hoy veremos lo que son los Traits en PHP 8.
En clases anteriores, exploramos el concepto de herencia simple en PHP. A diferencia de lenguajes como C++, PHP no admite herencia múltiple, lo que significaba que no podíamos heredar de múltiples clases a la vez. Sin embargo, para superar esta limitación, se crearon los Traits.
¡Empecemos!
¿Qué son los Traits en PHP?
Los Traits son una característica que permite la reutilización de código entre clases de manera más flexible que la herencia tradicional. Un Trait es similar a una clase, pero su propósito principal es proporcionar métodos que pueden ser reutilizados en múltiples clases, sin requerir herencia múltiple.
Un Traits es similar a una clase, con la única funcionalidad de agrupar métodos de una manera detallada. Por esta razón, no permite crear una nueva instancia.
La sintaxis para definir un Trait es similar a la de una clase.
trait MiTrait { public function metodoTrait() { // Código del método compartido por otras clases } }
Luego, para usar un Trait en una clase, se utiliza la palabra clave “use”.
class MiClase { use MiTrait; // Resto de la clase y su implementación... }
Ejemplo de implementar un Traits
Ahora veremos un ejemplo. En primer lugar, vamos a crear el archivo traits.php en la ruta de nuestro proyecto. Para ir probando los ejemplos abrimos nuestro navegador, en la ruta localhost:8080/curso_php8/traits.php.
Crear un trait
Primeramente, vamos a crear una clase “Libro” que tendrá un método llamado título.
class Libro { public function titulo($nombre){ echo "Libro: ". $nombre; } }
Seguidamente, vamos a crear un “trait” LibrosBiograficos que también tiene un método descripcionBiografica.
trait LibrosBiograficos { public function descripcionBiografica(){ echo "Contienen aspectos en los que se narra la vida de una persona"; } }
Extender los métodos de un trait
Ahora vamos a crear una clase Lector, imaginemos que esta nueva clase necesita utilizar los métodos de las clases Libro y LibrosBiograficos, no podemos heredar dos clases a la vez en PHP (solo podemos heredar de una). Por esta razón, la clase LibrosBiograficos lo declaramos como Trait y no como clase.
La nueva clase Lector va a extender de la clase Libro, pero también va a extender del trait LibrosBiograficos con la palabra reservada use, así se asegura acceder a los métodos tanto de Libro como LibrosBiograficos.
class Lector extends Libro { use LibrosBiograficos; public function formato($formato){ echo "Formato: " . $formato; } }
Por último, vamos a crear un objeto $libro que va a ser una nueva instancia de la clase Lector, con el nuevo objeto vamos a poder acceder tanto a los métodos de la propia clase como a los métodos de Libro y LibrosBiograficos.
$libro = new Lector(); $libro->titulo("Steve Jobs"); $libro->descripcionBiografica(); $libro->formato("Electronico");
Actualizamos nuestro navegador, en la ruta del ejemplo podemos observar los resultados.
Ejercicios de la clase
1.- Crear un traits de Geolocalización que permita a las clases obtener la ubicación actual, calcular la distancia entre dos puntos.
Conclusión
Los Traits en PHP son una herramienta poderosa para reutilizar y compartir código entre clases sin depender de la herencia múltiple. Permiten una mayor modularidad y flexibilidad en el diseño de clases, lo que facilita el desarrollo de aplicaciones más mantenibles y extensibles.
Hasta aquí el tutorial de hoy Traits en PHP 8, puedes descargarte el código fuente de este ejemplo y todos los demás en el repositorio de GitHub, si quieres saber como subir tu proyecto a GitHub aquí te dejo un tutorial donde te indico paso a paso a subir tu proyecto a GitHub.
Si tienes alguna consulta dejarnos un comentario o si quieres interiorizar más en el tema de Traits puedes visitar el sitio oficial de PHP. En el próximo tutorial veremos lo que son las excepciones en PHP 8.
Saludos y éxitos.
Victor Peña
Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.