Menu
Coddy logo textTech

Grundlegende Vererbung

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

Vererbung ermöglicht es einer Klasse, Eigenschaften und Methoden von einer anderen Klasse zu übernehmen. Anstatt denselben Code neu zu schreiben, kannst du eine Basisklasse mit gemeinsam genutzter Funktionalität erstellen und andere Klassen von ihr erben lassen.

Die Klasse, von der geerbt wird, wird als Basisklasse (oder Elternklasse) bezeichnet, und die Klasse, die erbt, wird als Kindklasse bezeichnet. Du verwendest das Schlüsselwort extends, um diese Beziehung herzustellen:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
    
    public function speak() {
        return "$this->name makes a sound";
    }
}

class Dog extends Animal {
    public function fetch() {
        return "$this->name fetches the ball";
    }
}

$dog = new Dog("Buddy");
echo $dog->speak() . "\n";
echo $dog->fetch();

Ausgabe:

Buddy makes a sound
Buddy fetches the ball

Die Klasse Dog hat automatisch Zugriff auf die Eigenschaft $name, den Konstruktor und die speak()-Methode von Animal. Sie definiert außerdem ihre eigene fetch()-Methode, die nur Hunde haben.

Dies schafft eine klare Hierarchie: Jeder Hund ist ein Tier, daher ist es sinnvoll, dass Dog von Animal erbt. Die Kindklasse kann alles von der Elternklasse verwenden und gleichzeitig ihr eigenes spezialisiertes Verhalten hinzufügen.

Wichtiger Punkt: Vererbung fördert die Wiederverwendung von Code und stellt logische Beziehungen zwischen Klassen her. Die untergeordnete Klasse erbt alle öffentlichen und geschützten Member von der übergeordneten Klasse, wodurch Duplikate reduziert und dein Code leichter wartbar wird.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Fahrzeugsystem mit einer Hierarchie, das veranschaulicht, wie Vererbung es Kindklassen ermöglicht, Funktionalität von einer Elternklasse zu übernehmen und gleichzeitig eigene spezialisierte Verhaltensweisen hinzuzufügen.

Du wirst deinen Code auf drei Dateien verteilen:

  • Vehicle.php: Definiere eine Vehicle-Klasse, die als Elternklasse für alle Fahrzeuge dient. Sie sollte eine öffentliche $brand-Eigenschaft und einen Konstruktor haben, der die Marke entgegennimmt und festlegt. Füge eine start()-Methode hinzu, die "[brand] is starting" zurückgibt, sowie eine stop()-Methode, die "[brand] is stopping" zurückgibt.
  • Motorcycle.php: Definiere eine Motorcycle-Klasse, die Vehicle erweitert. Binde die Vehicle-Datei am Anfang ein. Die Motorcycle-Klasse benötigt keinen eigenen Konstruktor, da sie den Konstruktor der Elternklasse erbt. Füge eine wheelie()-Methode hinzu, die "[brand] is doing a wheelie!" zurückgibt. Dies ist ein Verhalten, das nur Motorräder besitzen.
  • main.php: Binde die Motorcycle-Datei ein, die bereits Vehicle einbindet. Du erhältst eine Eingabe: die Marke des Motorrads. Erstelle ein Motorcycle-Objekt mit dieser Marke. Gib das Ergebnis des Aufrufs von start(), dann von wheelie() und anschließend von stop() aus, jeweils in einer eigenen Zeile.

Beachte, wie die Motorcycle-Klasse automatisch die $brand-Eigenschaft, den Konstruktor sowie die beiden Methoden start() und stop() von Vehicle erbt. Die Kindklasse muss nur definieren, was sie einzigartig macht – in diesem Fall die Fähigkeit, einen Wheelie zu machen. Das ist die Stärke der Vererbung: Schreibe gemeinsame Funktionalität einmal in der Elternklasse und ermögliche es den Kindern, sie wiederzuverwenden und gleichzeitig eigene Spezialisierungen hinzuzufügen.

Probier es selbst

<?php
// Die Motorcycle-Klasse einbinden (die bereits Vehicle enthält)
require_once 'Motorcycle.php';

// Eingabe lesen
$brand = trim(fgets(STDIN));

// TODO: Erstelle ein Motorcycle-Objekt mit der Marke

// TODO: Gib das Ergebnis von start() aus

// TODO: Gib das Ergebnis von wheelie() aus

// TODO: Gib das Ergebnis von stop() aus
?>
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