Menu
Coddy logo textTech

Das parent:: Schlüsselwort

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

Wenn eine Kindklasse von einer Elternklasse erbt, müssen Sie manchmal direkt auf die Methoden oder Eigenschaften der Elternklasse zugreifen. Das Schlüsselwort parent:: ermöglicht es Ihnen, die Implementierung der Elternklasse aus der Kindklasse heraus aufzurufen.

Dies ist besonders nützlich in Konstruktoren, wenn die Kindklasse die Eigenschaften der Elternklasse initialisieren muss, während sie gleichzeitig ihre eigenen einrichtet:

<?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 wieder, anstatt sie zu duplizieren. Ohne diesen Aufruf würde die Eigenschaft $name niemals gesetzt werden.

Sie können parent:: verwenden, um jede Methode der Elternklasse aufzurufen, nicht nur Konstruktoren. Dies ist besonders wichtig, wenn Sie das Verhalten einer Methode erweitern möchten, anstatt es vollständig zu ersetzen.

Wichtiger Punkt: Das Schlüsselwort parent:: bietet eine Möglichkeit, auf die Implementierung der Elternklasse zuzugreifen. Es ist essenziell für ordnungsgemäßes Constructor Chaining und um auf geerbter Funktionalität aufzubauen, anstatt sie neu zu schreiben.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Produktkatalog-System erstellen, das zeigt, wie Kindklassen die Funktionalität von Elternklassen mithilfe des Schlüsselworts parent:: erweitern können, um Konstruktoren ordnungsgemäß zu verketten und auf geerbten Methoden aufzubauen.

Sie werden Ihren Code in drei Dateien organisieren:

  • Product.php — Definieren Sie eine Klasse Product, die als Basis für alle Produkte dient. Sie sollte die öffentlichen Eigenschaften $name und $price haben. Der Konstruktor akzeptiert einen Namen und einen Preis und setzt beide Eigenschaften. Fügen Sie eine Methode getDetails() hinzu, die "[name]: $[price]" zurückgibt.
  • ElectronicProduct.php — Definieren Sie eine Klasse ElectronicProduct, die Product erweitert. Binden Sie die Product-Datei am Anfang ein. Diese Klasse fügt eine Eigenschaft $warranty (in Monaten) hinzu. Der Konstruktor sollte Name, Preis und Garantie akzeptieren — verwenden Sie parent::__construct(), um den Namen und den Preis über die Elternklasse zu initialisieren, und setzen Sie dann die Garantie selbst. Erstellen Sie eine Methode getDetails(), die auf der Implementierung der Elternklasse aufbaut: Rufen Sie parent::getDetails() auf und hängen Sie " (Warranty: [warranty] months)" an.
  • main.php — Binden Sie die ElectronicProduct-Datei ein. Sie erhalten drei Eingaben: den Produktnamen, den Preis (als String, der in einen Float umgewandelt werden soll) und den Garantiezeitraum (als String, der in einen Integer umgewandelt werden soll). Erstellen Sie ein ElectronicProduct mit diesen Werten und geben Sie das Ergebnis des Aufrufs von getDetails() aus.

Diese Herausforderung zeigt die wahre Stärke von parent:: — nicht nur für die Verkettung von Konstruktoren, sondern auch für die Erweiterung des Methodenverhaltens. Ihr ElectronicProduct verwendet die Formatierungslogik der Elternklasse wieder und fügt eigene Details hinzu, wodurch Codeduplizierung vermieden und eine detailliertere Ausgabe erstellt wird.

Spickzettel

Das Schlüsselwort parent:: ermöglicht es einer untergeordneten Klasse, auf Methoden und Eigenschaften ihrer übergeordneten Klasse zuzugreifen.

Verwenden Sie parent::__construct(), um den Konstruktor der übergeordneten Klasse aus der untergeordneten Klasse aufzurufen:

<?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;
    }
}

Sie können parent:: auch verwenden, um eine beliebige Methode der übergeordneten Klasse aufzurufen und deren Verhalten zu erweitern:

<?php
class Animal {
    public function describe() {
        return "This is an animal";
    }
}

class Dog extends Animal {
    public function describe() {
        return parent::describe() . " and it's a dog";
    }
}

Dieser Ansatz ermöglicht es untergeordneten Klassen, die Logik der übergeordneten Klasse wiederzuverwenden, anstatt Code zu duplizieren, was eine korrekte Konstruktor-Verkettung und Methodenerweiterung ermöglicht.

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: Erstellen Sie ein ElectronicProduct mit den Eingabewerten
// und geben Sie 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