Contenido del curso
Cookies y sesiones
Manejo de excepciones
Trabajando con fechas
Modularización
- 16

Modularización de código en PHP con archivos
18:41 min - 17

Namespaces en PHP para evitar clases repetidas
16:15 min - 18

Autocarga de archivos con Composer y PSR-4
15:05 min - 19

Qué es un front controller en PHP
08:56 min - 20

URLs limpias con htaccess en PHP
17:28 min - 21

Traits en PHP: reutiliza métodos sin herencia
Viendo ahora
Cierre
Traits en PHP: reutiliza métodos sin herencia
Resumen
Los traits en PHP son plantillas reutilizables que permiten compartir métodos entre varias clases sin recurrir a la herencia tradicional. Si programas en PHP y buscas evitar duplicar código entre clases que comparten comportamientos, los traits te dan una alternativa flexible y limpia para resolverlo.
A diferencia de una clase, un trait no se instancia. Funciona como una especie de molde que tus clases pueden importar para acceder a sus métodos como si fueran propios. Pensemos en un michi y un perrito: ambos pueden jugar y dormir, aunque cada uno tenga sus propios métodos únicos. Ahí es donde un trait brilla.
¿Qué es un trait en PHP y para qué sirve?
Un trait es una estructura que agrupa métodos comunes para que distintas clases los reutilicen. La sintaxis es muy parecida a la de una clase, pero usas la palabra clave trait en lugar de class [02:50].
¿Cuál es la diferencia entre un trait y una clase en PHP? Una clase se puede instanciar y heredar; un trait no. El trait solo existe para que otras clases lo importen y reutilicen sus métodos.
Los traits resuelven una limitación clásica de PHP: no soporta herencia múltiple. Si necesitas que dos clases distintas compartan ciertos métodos sin forzar una jerarquía artificial, los traits son la salida elegante.
¿Cuándo conviene usar un trait y no herencia?
Usa un trait cuando los métodos sean comunes pero las clases no compartan una relación lógica de padre e hijo. Por ejemplo, un perrito y un gato no necesitan heredar de una clase abstracta Pet si solo quieres compartir comportamientos como jugar o dormir.
La regla práctica es esta: si la relación es "es un", usa herencia; si la relación es "tiene la capacidad de", usa un trait.
¿Cómo se crea un trait paso a paso?
La creación de un trait sigue convenciones similares a las de una clase, especialmente si trabajas con la autocarga de Composer bajo el estándar PSR-4. Esto implica que el archivo debe llamarse exactamente igual que el trait y debe tener un namespace que coincida con la ruta de su carpeta.
La estructura típica del proyecto se ve así:
- Una carpeta
app/clasespara tus clases principales comoMichi.phpyPerrito.php. - Una carpeta
app/clases/traitspara los traits, por ejemploPet.php. - Un archivo
index.phpcomo punto de entrada o front controller. - El
composer.jsonconfigurado conautoloadapuntando al namespaceApphacia la carpetaapp.
Dentro de Pet.php, declaras el trait con esta forma [05:30]:
php
<?php namespace App\Clases\Traits; trait Pet { public function play() { return "I'm playing"; } public function sleep() { return "I'm sleeping"; } } Fíjate que dentro del *trait* puedes definir métodos públicos, propiedades protegidas y prácticamente cualquier miembro que pondrías en una clase normal. ## ¿Cómo se usa un trait dentro de una clase? Para usar un *trait*, primero lo importas con `use` a nivel de *namespace* y luego lo declaras dentro de la clase con `use` otra vez, esta vez como instrucción interna [08:15]. La clase `Michi` queda así: php <?php namespace App\Clases; use App\Clases\Traits\Pet; class Michi { use Pet; public function sayMiau() { return "¡miau! 🐱"; } public function scratch() { return "😾"; } } La clase `Perrito` sigue exactamente la misma lógica, importando el mismo *trait* `Pet` y agregando sus métodos propios como `bark` y `drool`. > **¿Puedo usar varios traits en una misma clase?** Sí. PHP permite incluir múltiples traits separándolos por comas en la misma instrucción `use` dentro de la clase, lo que multiplica la reutilización. ### ¿Cómo instanciar y probar las clases con traits? En el archivo `index.php` haces el único `require` necesario: el *autoload* de *Composer*, generado tras correr `composer dump-autoload` [10:40]. Después instancias las clases y accedes tanto a sus métodos propios como a los heredados del *trait*. php <?php require 'vendor/autoload.php'; use App\Clases\Perrito; use App\Clases\Michi; $firulais = new Perrito(); $misterMichi = new Michi(); echo $firulais->bark() . "\n"; echo $firulais->play() . "\n"; echo $misterMichi->sayMiau() . "\n"; echo $misterMichi->sleep() . "\n"; Al ejecutar `php index.php`, verás cómo el perrito ladra y juega, mientras que el *michi* maúlla y duerme. Aunque ni `Perrito` ni `Michi` declaran los métodos `play` o `sleep`, ambos los reciben gracias al *trait* `Pet`. ## ¿Qué buenas prácticas seguir al trabajar con traits? Los *traits* son potentes, pero conviene usarlos con criterio para no terminar con código difícil de mantener. Estas son las reglas que te van a ahorrar dolores de cabeza: - Usa traits solo para métodos genuinamente reutilizables entre clases sin relación jerárquica. - Mantén los nombres de archivo, trait y *namespace* alineados con **PSR-4** para que la autocarga funcione. - Evita lógica muy específica dentro de traits; lo específico va en cada clase. - Documenta qué espera el *trait* de la clase que lo usa, sobre todo si depende de propiedades. Con esto ya tienes claro cómo crear, importar y aplicar traits para escribir código PHP más limpio y reutilizable. ¿Qué otros usos se te ocurren para los traits en tus proyectos? Cuéntame en los comentarios.