Menu
Coddy logo textTech

Das Schlüsselwort parent::

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

Wenn eine Kindklasse von einer Elternklasse erbt, musst du manchmal direkt auf die Methoden oder Eigenschaften der Elternklasse zugreifen. Mit dem Schlüsselwort parent:: kannst du innerhalb der Kindklasse die Implementierung der Elternklasse aufrufen.

Dies ist besonders in Konstruktoren nützlich, wenn die untergeordnete Klasse die Eigenschaften der übergeordneten Klasse initialisieren und gleichzeitig ihre eigenen einrichten muss:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

class Dog extends Animal {
    public $breed;
    
    public function __construct($name, $breed) {
        parent::__construct($name);
        $this->breed = $breed;
    }
    
    public function describe() {
        return "$this->name is a $this->breed";
    }
}

$dog = new Dog("Max", "Labrador");
echo $dog->describe();

Ausgabe:

Max is a Labrador

Durch den Aufruf von parent::__construct($name) verwendet die Kindklasse die Initialisierungslogik der Elternklasse erneut, anstatt sie zu duplizieren. Ohne diesen Aufruf würde die Eigenschaft $name niemals gesetzt werden.

Du kannst parent:: verwenden, um jede Methode der übergeordneten Klasse aufzurufen, nicht nur Konstruktoren. Das wird besonders wichtig, wenn du das Verhalten einer Methode erweitern möchtest, anstatt sie vollständig zu ersetzen.

Wichtiger Punkt: Das Schlüsselwort parent:: bietet eine Möglichkeit, auf die Implementierung der übergeordneten Klasse zuzugreifen. Es ist für die korrekte Verkettung von Konstruktoren und dafür unerlässlich, auf geerbter Funktionalität aufzubauen, anstatt sie neu zu schreiben.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Produktkatalogsystem, das zeigt, wie Kindklassen die Funktionalität von Elternklassen mithilfe des Schlüsselworts parent:: erweitern können, um Konstruktoren korrekt zu verketten und auf geerbten Methoden aufzubauen.

Du organisierst deinen Code auf drei Dateien:

  • Product.php: Definiere eine Product-Klasse, die als Basis für alle Produkte dient. Sie sollte die öffentlichen Eigenschaften $name und $price besitzen. Der Konstruktor akzeptiert einen Namen und einen Preis und setzt beide Eigenschaften. Füge eine getDetails()-Methode hinzu, die "[name]: $[price]" zurückgibt.
  • ElectronicProduct.php: Definiere eine ElectronicProduct-Klasse, die Product erweitert. Binde die Product-Datei am Anfang ein. Diese Klasse fügt eine Eigenschaft $warranty (in Monaten) hinzu. Der Konstruktor sollte Name, Preis und Garantiezeit akzeptieren: Verwende parent::__construct(), um Name und Preis über die Elternklasse zu initialisieren, und setze anschließend die Garantiezeit selbst. Erstelle eine getDetails()-Methode, die auf der Implementierung der Elternklasse aufbaut: Rufe parent::getDetails() auf und hänge " (Warranty: [warranty] months)" daran an.
  • main.php: Binde die ElectronicProduct-Datei ein. Du erhältst drei Eingaben: den Produktnamen, den Preis (als String, der in einen Float umgewandelt werden soll) und die Garantiezeit (als String, der in eine Ganzzahl umgewandelt werden soll). Erstelle mit diesen Werten ein ElectronicProduct-Objekt und gib das Ergebnis des Aufrufs von getDetails() aus.

Diese Herausforderung zeigt die wahre Stärke von parent::. Nicht nur beim Verketten von Konstruktoren, sondern auch beim Erweitern des Methodenverhaltens. Dein ElectronicProduct verwendet die Formatierungslogik der Elternklasse wieder und fügt darüber hinaus eigene Details hinzu. So vermeidest du Code-Duplikation und erzeugst gleichzeitig eine umfangreichere Ausgabe.

Probier es selbst

<?php
require_once 'ElectronicProduct.php';

// Eingaben lesen
$name = trim(fgets(STDIN));
$price = floatval(trim(fgets(STDIN)));
$warranty = intval(trim(fgets(STDIN)));

// TODO: Erstelle ein ElectronicProduct mit den Eingabewerten
// und gib das Ergebnis des Aufrufs von getDetails() 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