Menu
Coddy logo textTech

Einführung in Traits

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 51 von 91.

PHP unterstützt nur die einfache Vererbung – eine Klasse kann nur eine übergeordnete Klasse erweitern. Aber was ist, wenn du Funktionalität über mehrere voneinander unabhängige Klassen hinweg gemeinsam nutzen musst? Hier kommen Traits ins Spiel.

Ein Trait ist ein Mechanismus zur Wiederverwendung von Code, mit dem du Methoden und Eigenschaften definieren kannst, die in mehrere Klassen eingefügt werden können. Stell dir Traits als Copy-and-paste auf Sprachebene vor – der Code aus einem Trait wird zu einem Teil der Klasse, die ihn verwendet.

<?php
trait Timestampable {
    private string $createdAt;
    
    public function setCreatedAt(): void {
        $this->createdAt = date('Y-m-d H:i:s');
    }
    
    public function getCreatedAt(): string {
        return $this->createdAt;
    }
}

class Article {
    use Timestampable;
    
    public function __construct(public string $title) {
        $this->setCreatedAt();
    }
}

$article = new Article("PHP Traits");
echo $article->getCreatedAt();

Das Schlüsselwort use innerhalb einer Klasse importiert die Mitglieder des Traits. Nun hat Article Zugriff auf setCreatedAt() und getCreatedAt(), als wären sie direkt in der Klasse definiert.

Dasselbe Trait kann in völlig unterschiedlichen Klassen verwendet werden – einer Comment-Klasse, einer User-Klasse oder jeder anderen Klasse, die eine Zeitstempelfunktionalität benötigt. Dadurch wird die Einschränkung der einfachen Vererbung gelöst, indem der horizontale Codeaustausch innerhalb deiner Klassenhierarchie ermöglicht wird.

challenge icon

Aufgabe

Einfach

Erstellen wir ein einfaches Begrüßungssystem, das demonstriert, wie Traits es dir ermöglichen, Funktionalität zwischen voneinander unabhängigen Klassen zu teilen. Du erstellst einen Trait, der eine Begrüßungsfunktion bereitstellt, und verwendest ihn anschließend in zwei völlig unterschiedlichen Klassen.

Du organisierst deinen Code über drei Dateien:

  • Greetable.php: Erstelle einen Trait namens Greetable, der Begrüßungsfunktionalität bereitstellt. Der Trait sollte Folgendes enthalten:
    • Eine private Eigenschaft $greeting (String)
    • Eine Methode setGreeting(string $greeting), die die Begrüßungsnachricht speichert
    • Eine Methode greet(), die die Begrüßungsnachricht zurückgibt
  • Person.php: Erstelle eine Person-Klasse, die den Greetable-Trait verwendet. Binde die Trait-Datei ein und verwende Konstruktor-Promotion, um eine öffentliche Eigenschaft $name zu definieren. Rufe im Konstruktor setGreeting() auf, um die Begrüßung auf "Hello, I'm [name]" zu setzen.
  • Robot.php: Erstelle eine Robot-Klasse, die ebenfalls den Greetable-Trait verwendet. Binde die Trait-Datei ein und verwende Konstruktor-Promotion, um eine öffentliche Eigenschaft $model zu definieren. Rufe im Konstruktor setGreeting() auf, um die Begrüßung auf "Beep boop, I am model [model]" zu setzen.

Binde in main.php beide Klassendateien ein. Du erhältst zwei Eingaben: den Namen einer Person und die Modellnummer eines Roboters. Erstelle Instanzen beider Klassen und gib ihre Begrüßungen in separaten Zeilen aus.

Dies demonstriert die Leistungsfähigkeit von Traits: Person und Robot sind völlig voneinander unabhängige Klassen ohne gemeinsamen Elternteil, erhalten jedoch beide durch den Trait dieselbe Begrüßungsfunktionalität. Jede Klasse passt die Verwendung dieser Funktionalität auf ihre eigene Weise an.

Probier es selbst

<?php

require_once 'Person.php';
require_once 'Robot.php';

// Eingabe lesen
$name = trim(fgets(STDIN));
$model = trim(fgets(STDIN));

// TODO: Erstelle eine Person-Instanz mit dem gegebenen Namen
// TODO: Erstelle eine Robot-Instanz mit dem gegebenen Modell
// TODO: Gib die Begrüßung der Person aus
// TODO: Gib die Begrüßung des Robots aus (in einer neuen Zeile)

?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler