Vererbung von PHP-Klassen

Aus Vokabulabor
Zur Navigation springen Zur Suche springen

Links

Zielsetzung

Eine Klasse B kann alle Elemente einer anderen Klasse A erben:

  • Die Daten von A sind auch in B verfügbar
  • Die Operationen von A sind auch in B verfügbar.

Beispiel

<?php
class Name {
  public $firstname;
  public $lastname;
  public $title;
  public function __construct(string $firstname, string $lastname, string $title = ''){
    $this->firstname = $firstname;
    $this->lastname = $lastname;
    $this->title = $title;
  }
  public function fullname(): string{
    $rc = '';
    if ($this->title !== ''){
      $rc = $this->title . ' ';
    }
    return $rc . $this->firstname . ' ' . $this->lastname;
  }
}
class Address extends Name {
  public $phone;
  public function __construct(string $firstname, string $lastname, string $phone, string $title = ''){
    parent::__construct($firstname, $lastname, $title);
    $this->phone = $phone;
  }
  public function info(){
    $rc = $this->fullname() . ' ' + $this->phone;
    return $rc;
  }
}
$addressHuber = new Address('Bob', 'Huber', '0172-11339922', 'Dr.');
echo 'Hallo ', $addressHuber->fullname(), "\n";
echo $addressHuber->info(), "\n";
$addressMiller = new Address('Bea', 'Miller', '0156-75429739');
echo $addressMiller->info(), "\n";
  • Wir definieren eine "Basisklasse" namens Name.
  • Diese Klasse hat die Methode fullname().
  • Wir definieren eine "Oberklasse" namens Address, die als Unterklasse Name enthält: Address extends Name
  • Im Konstruktor rufen wir den Konstruktor der Basisklasse auf, damit Vorname und Nachname gespeichert werden.
  • In der Methode info() verwenden wir die Methode fullname() aus der Unterklasse: $this->fullname()
  • Wir erzeugen ein Objekt der Klasse Address: $addressHuber = new Address('Hans', 'Huber', '0172-11339922', 'Dr.');
  • Da Address eine Unterklasse ("Ableitung") von Name ist, können wir auch eine Methode aus Name verwenden: $addressHuber->fullname()