OOP in PHP und Perl: Konstruktor der Elternklasse aufrufen

In welchen Fällen der Konstruktor der Elternklasse auzurufen ist

CODE zur Veranschaulichung

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.

Rufe den Vaterkonstruktor in Perl

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. s​os­@rolf­rost.de.