studyklar
IProg · Skript 5 · Abschnitt 7

Vererbung und Interfaces in PHP

Mit Vererbung baut eine Klasse auf einer anderen auf, statt alles neu zu schreiben. Ein Interface legt fest, welche Methoden eine Klasse haben muss. Beides funktioniert in PHP fast wie in Java. Rechts laufen die Beispiele mit ihrer echten Ausgabe. Mit Weiter geht es Schritt für Schritt voran.

Worum es geht

Skript 05, Folien 26 und 28: Vererbung mit extends und parent::, Interfaces mit interface und implements (Beispiel 05_classes.php).

Wie erbt eine Klasse in PHP von einer anderen? Wie ruft sie Konstruktor und Methoden der Klasse auf, von der sie erbt? Und was ist ein Interface?

Merke: Die Klasse, von der geerbt wird, heißt Oberklasse; die erbende heißt Unterklasse. Die Unterklasse hat alles, was die Oberklasse hat, und kann mehr.

So gehen wir vor:

  1. Das Beispiel der Folie: Sporthotel erbt von Hotel.
  2. Konstruktor und __toString mit parent::.
  3. private, protected und Typangaben bei Vererbung.
  4. Interfaces: deklarieren und implementieren.
  5. Eine Klausurfrage dazu.
Aus Skript 05, Folie 23: Die Klasse Hotel hat die privaten Attribute $name und $zimmer und den Konstruktor __construct($n, $z = 0).

Die Oberklasse Hotel

<?phpclass Hotel {  private $name;  private int $zimmer = 0;   public function __construct($n, $z = 0) {    $this->name = $n;    $this->zimmer = $z;  }   public function __toString() {    return "Hotel $this->name, Zimmer: $this->zimmer";  }}

Hotel ist die Klasse von Folie 23. Für dieses Beispiel bekommt sie eine Ergänzung: eine Methode __toString, die Name und Zimmerzahl als Text liefert. Folie 26 ruft genau diese Methode mit parent::__toString() auf, zeigt sie aber nicht.

__toString ruft PHP von selbst auf, wenn ein Objekt als Text gebraucht wird, etwa bei echo $h.

extends: Sporthotel erbt von Hotel

Skript · Folie 26

Vererbung: vieles ähnlich zu Java.

class Sporthotel extends Hotel {  private $sportarten;

class Sporthotel extends Hotel heißt: Sporthotel erbt von Hotel. Jedes Sporthotel hat also einen Namen, eine Zimmerzahl und alle Methoden von Hotel, ohne dass sie hier noch einmal stehen.

Dazu kommt ein eigenes Attribut $sportarten, das nur Sporthotels haben.

Noch 13 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1Vererbung

Sporthotel extends Hotel

<?phpclass Hotel {  private $name;  private int $zimmer = 0;   public function __construct($n, $z = 0) {    $this->name = $n;    $this->zimmer = $z;  }   public function __toString() {    return "Hotel $this->name, Zimmer: $this->zimmer";  }} class Sporthotel extends Hotel {  private $sportarten;   public function __construct($n, $z, $s) {    parent::__construct ($n, $z);    $this->sportarten = $s;  }   public function __toString( ) {    return parent::__toString()           . " Sportarten: $this->sportarten";  }} $h = new Hotel("Krone", 20);echo $h, "\n";$s = new Sporthotel("Alpenblick", 40, "Ski, Tennis");echo $s, "\n";
LegendeZeilen des SchrittsHotel und Sporthotel: Sporthotel erbt alles von Hotel.