PHP Handbuch
Zurück | Kapitel 14. Klassen und Objekte | Nach vorne

# `extends`

Oft braucht man Klassen mit in einer anderen Klasse ähnlichen Variablen und Funktionen. So ist es eine gute Vorgehensweise, eine in allen Ihren Projekten verwendbare Oberklasse zu definieren, und diese dann den Bedürfnissen Ihrer einzelnen Projekte anzupassen. Um dies zu erleichtern, können Klassen andere Klassen erweitern. Die erweiterte bzw. abgeleitete Klasse verfügt über alle Variablen und Funktionen der Basisklasse (dies wird 'Vererbung' genannt, obwohl niemand gestorben ist), und was Sie in der erweiterten Definition hinzufügen. Es ist nicht möglich, etwas von einer Klasse wegzunehmen, d.h. Sie können keine existierenden Variablen oder Funktionen 'wegdefinieren'. Eine Unterklasse ist immer von einer einzigen Oberklasse abhängig, d.h. Mehrfachvererbung wird nicht unterstützt. Klassen werden mittels dem Schlüsselwort 'extends' erweitert.

    class Named_Cart extends Cart
    {
        var $owner;

        function set_owner ($name)
        {
            $this->owner = $name;
        }
    }

Hier wird die Klasse Named_Cart definiert, die über alle Variablen und Funktionen von Cart, plus der Variable $owner und der Funktion set_owner() verfügt. Sie können einen bestimmten Einkaufswagen (Named_Cart) auf dem üblichen Weg erstellen, und nun auch den Besitzer (owner) bestimmen und erfragen. Sie können noch immer die normalen Cart Funktionen an Named_Cart anwenden:

    $ncart = new Named_Cart;    // Erstellt einen bestimmten Einkaufwagen
    $ncart->set_owner("kris");  // den Besitzer festlegen
    print $ncart->owner;        // den Besitzer ausgeben
    $ncart->add_item("10", 1);  // (vererbte Funktionalität von Cart)

Dies wird auch eine "Eltern-Kind" Beziehung genannt. Sie erstellen eine Klasse ("Eltern"), und erstellen mittels `extends` eine neue Klasse, die auf der "Eltern"-Klasse basiert: die "Kind"-Klasse. Sie können auch diese neue Unterklasse verwenden und eine neue, auf dieser Klasse basierenden Klasse erstellen.

> Anmerkung: Bevor Sie Klassen verwenden können, müssen Sie diese definieren. Wenn Sie wollen, dass `Named_Cart` die Klasse `Cart` erweitert, müssen Sie `Cart` erst definieren. Wenn Sie eine andere Klasse, z.B. `Yellow_named_cart` erstellen wollen, welche auf `Named_Cart` basiert, müssen Sie zuerst `Named_Cart` definieren. Kurz gesagt ist die Reihenfolge, in der die Klassen definiert werden, sehr wichtig.

Zurück | Zum Anfang | Nach vorne
Klassen und Objekte | Nach oben | `Konstruktoren`