Hauptmenü

Untermenü

OOP PHP5 - Grundlagen - Vererbung

1. Das Grundprinzip

Bei den Grundlagen habe ich euch ja schon kurz auf die Sache mit den Säugetieren hingewiesen. Die Überlegung dahinter ist folgende. Wir benötigen zwei Objekte vom Typ Mensch und eines vom Typ Hund. Jetzt könnte man natürlich mit zwei separaten Klassen arbeiten. Aber da gibt es ein kleines Problem. Denn sowohl Menschen als auch Hunde verfügen zum Beispiel über zwei Geschlechter. Und in den meisten Fällen haben sie auch Namen. Es gibt also identische Eigenschaften, über die Menschen und Hunde verfügen.

2. Mutter- und Kindklassen

In PHP gibt es das Konzept der einfachen Vererbung. Das heißt, dass eine(!) Mutterklasse ihre Eigenschaften und Methoden auf beliebig viele Kindklassen vererben kann. Allerdings kann eine Kindklasse nicht die Methoden und Eigenschaften von mehreren Elternklassen erben. Um also mal auf obige Problematik zurück zu kommen, könnte man so vorgehen.


class Saeugetier
{
  protected $geschlecht;  
  protected function setzGeschlecht($value)
  {
    $this -> geschlecht $value;
  }
}
class Mensch extends Saeugetier
{
  ...
}
class Hund extends Saeugetier
{
  ...
}

extends

Damit haben wir nun den Kindklassen Mensch und Hund die Methoden und Eigenschaften der Elternklasse Saeugetier vererbt. Aus didaktischen Gründen habe ich diese mal als protected definiert. Das bedeutet, dass in diesem Fall(!) nur die eigene Klasse und die Kindklassen(!) darauf zugreifen können.

3. Großeltern- und Enkelklassen

Sowohl bei Menschen als auch bei Hunden kann man bekanntlicherweise noch zusätzliche Unterscheidungen treffen. Zum Beispiel nach dem Geschlecht. Das haben wir zwar schon als Eigenschaft in der Klasse Saeugetier, aber die Unterschiede sind so gravierend, dass das durchaus sinnvoll ist. Aus Platzgründen (und weil ich wohl ein heimlicher Chauvinist bin) konzentrieren wir uns erst mal nur auf die "Herren der Schöpfung".


class Saeugetier
{
  ...
}
class Mensch extends Saeugetier
{
  ...
}
class Hund extends Saeugetier
{
  ...
}
class Mann extends Mensch
{
  ...
}
class Ruede extends Hund
{
  ...
}

Hier vererbt nun die Großelternklasse Saeugetier ihre Eigenschaften und Methoden auf die Kindklassen Mensch und Hund. Und die vererben sie weiter an ihre(!) Kindklassen Mann und Ruede (das steht für Rüde und ist die Bezeichnung für einen männlichen Hund, falls das jemand nicht weiß). Das sind also Enkelklassen von Saeugetier. Allerdings muss man dabei auf ein paar Feinheiten achten, aber dazu komme ich jetzt.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt