Menu
Coddy logo textTech

Grundlagen der 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, können Sie eine Basisklasse mit gemeinsamer Funktionalität erstellen und andere Klassen von ihr erben lassen.

Die Klasse, von der geerbt wird, wird als Elternklasse (oder Basisklasse) bezeichnet, und die Klasse, die erbt, wird als Kindklasse bezeichnet. Sie verwenden 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 Methode speak() von Animal. Sie definiert außerdem ihre eigene Methode fetch(), 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.

Kernpunkt: Vererbung fördert die Wiederverwendung von Code und stellt logische Beziehungen zwischen Klassen her. Die Kindklasse erbt alle public und protected Member von der Elternklasse, was Redundanz reduziert und die Wartung Ihres Codes erleichtert.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Fahrzeughierarchie-System aufbauen, das demonstriert, wie Vererbung es Kindklassen ermöglicht, Funktionalitäten einer Elternklasse zu teilen und gleichzeitig ihre eigenen spezialisierten Verhaltensweisen hinzuzufügen.

Sie werden Ihren Code über drei Dateien organisieren:

  • Vehicle.php — Definieren Sie 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 setzt. Fügen Sie eine start()-Methode hinzu, die "[brand] is starting" zurückgibt, und eine stop()-Methode, die "[brand] is stopping" zurückgibt.
  • Motorcycle.php — Definieren Sie eine Motorcycle-Klasse, die Vehicle erweitert. Binden Sie die Vehicle-Datei am Anfang ein. Die Motorcycle-Klasse benötigt keinen eigenen Konstruktor, da sie den Konstruktor der Elternklasse erbt. Fügen Sie eine wheelie()-Methode hinzu, die "[brand] is doing a wheelie!" zurückgibt — dies ist ein Verhalten, das nur Motorräder haben.
  • main.php — Binden Sie die Motorcycle-Datei ein (welche bereits Vehicle einbindet). Sie erhalten eine Eingabe: die Motorradmarke. Erstellen Sie ein Motorcycle-Objekt mit dieser Marke. Geben Sie das Ergebnis des Aufrufs von start(), dann wheelie() und schließlich stop() aus, jeweils in einer eigenen Zeile.

Beachten Sie, wie die Motorcycle-Klasse automatisch die $brand-Eigenschaft, den Konstruktor sowie die 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. Dies ist die Stärke der Vererbung: Schreiben Sie gemeinsame Funktionalität einmal in der Elternklasse und lassen Sie die Kinder diese wiederverwenden, während sie ihre eigenen Spezialisierungen hinzufügen.

Probier es selbst

<?php
// Binde die Motorcycle-Klasse ein (welche 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