Traits vs Interfaces en PHP: ¿cuándo usar qué?
¡Hola a todos! Soy un desarrollador PHP principiante y siempre me confundo sobre cuándo usar traits y cuándo interfaces. Parece que ambos ayudan a reutilizar código, pero siento que son cosas diferentes.
Aquí hay un ejemplo concreto. Tengo una clase `Car` y una clase `Bicycle`. Ambas pueden moverse, así que creé una interfaz `MovableInterface` con el método `move()`. Esto funciona, pero en cada clase tengo que escribir mi propia implementación del método `move()`.
Luego aprendí sobre los traits. Creé un trait `EngineTrait` con el método `startEngine()`. Ahora puedo conectarlo a la clase `Car`, pero no a `Bicycle`, porque una bicicleta no tiene motor. Y entonces pensé: ¿no sería mejor haber hecho `startEngine()` un método de interfaz? Pero entonces tendría que implementarlo también en `Bicycle`, donde no es necesario.
Al final, tengo un lío en la cabeza. Algunos dicen que los traits son "copiar y pegar código", y las interfaces son "contrato". Pero, ¿cómo saber cuándo se necesita un contrato? Por favor, explíquenme en términos simples, cuándo usar cada uno.