Hauptmenü

Untermenü

OOP PHP5 - Unterschiede - Finale Klassen und Methoden

1. Überschreiben

Mit dieser Technik werde ich euch unter dem entsprechenden Punkt vertraut machen. Hier kommt erst mal nur das Grundsätzliche. Also, in PHP ist es unter bestimmten Umständen möglich, dass zum Beispiel eine Kindklasse die Methode oder Eigenschaft einer Elternklasse zerstört und sie neu aufbaut. Um das zu verhindern, arbeitet man mit dem Schlüsselwort final.

Das ist also mit dem italienischen "basta" oder dem deutschen "isso" gleichzusetzen. Man duldet keinen Widerspruch oder einen Eingriff von Außen. final entspricht in etwa dem Verhalten von so genannten Top-Managern. Die reagieren ähnlich.

2. Eigenschaften

Leider ist es nicht möglich, gezielt einzelne Eigenschaften als final zu deklarieren. Es ist, genau gesagt, überhaupt nicht möglich! Um zu verhindern, dass Eigenschaften nicht überschrieben werden können, gibt es nur eine radikale Methode. Man definiert die Klasse als solches.


final class Mensch
{
  ...
}

Leider hat das zur Folge, dass diese nicht mehr als Elternklasse zur Verfügung steht. Das heißt, sie kann nicht über extends in Kindklassen eingebunden werden.


final class Mensch
{
  ...
}
class Mann extends Mensch
{
  ...
}

erzeugt eine Fehlermeldung à la Class Mann may not inherit from final class (Mensch) in.... Also fassen wir zusammen. Es gibt keine finalen Eigenschaften sondern nur finale Klassen. Leider.

3. Methoden

Will man nun eine Methode gezielt vor dem Überschreiben schützen, so deklariert man sie als final. Der folgende Code wirft dann eine Fehlermeldung aus wie Fatal error: Cannot override final method Mensch::setzNamen().


class Mensch
{
  final protected function setzNamen ($value)
  {
    
  }
}
class Frau extends Mensch
{
  public function setzNamen ($value)
  {
    
  }
}
$doerte = new Frau;
$doerte -> setzNamen('Dörte');

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