In welchen Fällen der Konstruktor der Elternklasse auzurufen ist
Gegeben sei ein einfacher Fall für Vererbung. Die Basiklasse Person
definiert für ihre Instanz eine Person mit den Eigenschaften NAME
und VORNAME
. Die Klassenerweiterung Bewohner
nun, sieht eine zusätzliche Eigenschaft ALTER
vor welche der Instanz hinzuzufügen ist. Dieses Hinzugfügen neuer Eigenschaften, genau das ist der Grund dafür, den Vaterkonstruktor aufzurufen.
class Person{ function __construct($name, $vorname){ $this->NAME = $name; $this->VORNAME = $vorname; } } class Bewohner extends Person{ function __construct($name, $vorname, $alter){ # Rufe den Vaterkonstruktor # bisherige Eigenschaften werden gesetzt parent::__construct($name, $vorname); # Neue Eigenschaft hinzufügen $this->ALTER = $alter; } } $b = new Bewohner('Müller', 'Fritz', 63); print_r($b); # Ausgabe Bewohner Object ( [NAME] => Müller [VORNAME] => Fritz [ALTER] => 63 )
Merke: Ohne Aufruf des Vaterkonstruktors wird der Konstruktor der Elternklasse überschrieben und damit werden die in der Elternklasse definierten Eigenschaften NAME
und VORNAME
nicht gesetzt bzw. nicht geerbt.
In PHP/OOP werden sowohl Eigenschaften als auch Methoden vererbt. Sollen in der Subklasse weitere Eigenschaften über einen eigenen Konstruktor hinzugefügt und initialisiert werden, ist zur Initialisierung der geerbten Eigenschaften der Vaterkonstruktor aufzurufen.
In Perl ist diese Vorgehensweise genau dieselbe. Das heißt daß im Konstruktor der Subklasse der Konstruktor der Elternklasse aufgerufen wird wie folgt:
package Bewohner{ use base 'Person'; # Erbschaft sub new{ my $class = shift; my $name = shift; my $vorname = shift; my $alter = shift; # rufe den Konstruktor der Elternklasse my $self = $class->SUPER::new($name, $vorname); # Füge die neue Eigenschaft hinzu $self->{alter} = $alter; return $self; } }; my $b = Bewohner->new('Müller', 'Fritz', 63);
Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. sos@rolfrost.de.