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 LabradorDurch 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.
Aufgabe
EinfachErstellen 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 eineProduct-Klasse, die als Basis für alle Produkte dient. Sie sollte die öffentlichen Eigenschaften$nameund$pricebesitzen. Der Konstruktor akzeptiert einen Namen und einen Preis und setzt beide Eigenschaften. Füge einegetDetails()-Methode hinzu, die"[name]: $[price]"zurückgibt.ElectronicProduct.php: Definiere eineElectronicProduct-Klasse, dieProducterweitert. 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: Verwendeparent::__construct(), um Name und Preis über die Elternklasse zu initialisieren, und setze anschließend die Garantiezeit selbst. Erstelle einegetDetails()-Methode, die auf der Implementierung der Elternklasse aufbaut: Rufeparent::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 einElectronicProduct-Objekt und gib das Ergebnis des Aufrufs vongetDetails()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
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler