Traits vs Interfaces in PHP: Wann verwendet man was?
Hallo zusammen! Ich bin ein PHP-Anfänger und verwechsle ständig, wann ich Traits und wann Interfaces verwenden soll. Beide helfen scheinbar, Code wiederzuverwenden, aber ich habe das Gefühl, dass es unterschiedliche Dinge sind.
Hier ein konkretes Beispiel. Ich habe eine Klasse `Car` und eine Klasse `Bicycle`. Beide können sich bewegen, also habe ich ein Interface `MovableInterface` mit der Methode `move()` erstellt. Das funktioniert, aber in jeder Klasse muss ich meine eigene Implementierung der Methode `move()` schreiben.
Dann habe ich von Traits erfahren. Ich habe einen Trait `EngineTrait` mit der Methode `startEngine()` erstellt. Jetzt kann ich ihn in die Klasse `Car` einbinden, aber nicht in `Bicycle`, weil ein Fahrrad keinen Motor hat. Und da habe ich mich gefragt: Wäre es nicht besser gewesen, `startEngine()` als Methode eines Interfaces zu definieren? Aber dann müsste ich sie auch in `Bicycle` implementieren, wo sie nicht benötigt wird.
Am Ende habe ich ein Durcheinander im Kopf. Manche sagen, Traits sind "Code kopieren", und Interfaces sind "Verträge". Aber wie erkennt man, wo welcher Vertrag benötigt wird? Bitte erklärt es mir anhand einfacher Beispiele, wann