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 davon 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, während sie ihr eigenes spezialisiertes Verhalten hinzufügt.

Wichtiger Punkt: Vererbung fördert die Wiederverwendung von Code und stellt logische Beziehungen zwischen Klassen her. Die Kindklasse erbt alle öffentlichen (public) und geschützten (protected) Member von der Elternklasse, was Redundanz reduziert und die Wartung Ihres Codes erleichtert.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Fahrzeughierarchie-System erstellen, das zeigt, wie Vererbung es Kindklassen ermöglicht, Funktionen einer Elternklasse zu teilen und gleichzeitig ihr eigenes spezialisiertes Verhalten 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 spezifisch für Motorräder ist.
  • 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.

Spickzettel

Vererbung ermöglicht es einer Klasse, Eigenschaften und Methoden von einer anderen Klasse unter Verwendung des Schlüsselworts extends zu übernehmen. Die Klasse, von der geerbt wird, wird als Elternklasse (oder Basisklasse) bezeichnet, und die Klasse, die erbt, wird als Kindklasse bezeichnet.

<?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(); // Buddy makes a sound
echo $dog->fetch(); // Buddy fetches the ball

Die Kindklasse erbt alle öffentlichen und geschützten Elemente von der Elternklasse, einschließlich Eigenschaften, Konstruktoren und Methoden. Die Kindklasse kann auch eigene spezialisierte Methoden und Eigenschaften hinzufügen.

Vererbung fördert die Wiederverwendbarkeit von Code und stellt logische Beziehungen zwischen Klassen her, wodurch Redundanz reduziert und der Code einfacher zu warten ist.

Probier es selbst

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