Kapitel 13. Klassen und Objekte

Inhaltsverzeichnis
Klassen

Klassen

Eine Klasse ist eine Sammlung von Variablen und von Funktionen, die mit diesen Variablen arbeiten. Eine Klasse wird folgendermaßen definiert:


<?php
class Einkaufswagen {
    var $produkte;  // Produkte in Ihrem Einkaufswagen
   
    // Füge dem Einkaufswagen $anzahl Artikel der Sorte $artnr zu
 
    function fuege_hinzu ($artnr, $anzahl) {
        $this->produkte[$artnr] += $anzahl;
    }
   
    // Nimm $anzahl von Artikel wieder aus dem Einkaufswagen
 
    function nimm_heraus ($artnr, $anzahl) {
        if ($this->produkte[$artnr] > $anzahl) {
            $this->produkte[$artnr] -= $anzahl;
            return true;
        } else {
            return false;
        }   
    }
}
?>
     

In diesem Beispiel wird eine Klasse "Einkaufswagen" definiert. Sie besteht aus einem assoziativen Array von Produkten im Einkaufswagen und zwei Funktionen zum Zufügen und Entfernen von Einkäufen.

Klassen sind Typen, dass heisst die Blaupausen für realle Variablen. Um sie zu nutzen, muß zunächst eine Variable mit dem Operator new angelegt werden.


$einkaufswagen = new Einkaufswagen;
$einkaufswagen->fuege_hinzu("10", 1);
    

Hier wird das Objekt $einkaufswagen aus der Klasse Einkaufswagen geschaffen. Dann wird die enthaltene Funktion fuege_hinzu() aufgerufen, um ein Produkt mit der Artikelnummer 10 in den Einkaufswagen zu tun.

Klassen können ebenfalls Erweiterungen von anderen Klassen sein. Die erweiterte, oder auch abgeleitete Klasse enthält alle Funktionen der ursprünglichen Klasse, und dazu die eigenen Ergänzungen. Das geschieht mit dem Schlüsselwort "extends". Mehrfachvererbung wird von PHP nicht unterstützt.


class Mein_Einkaufswagen extends Einkaufswagen {
    var $besitzer;
  
    function setze_besitzer ($name) {
        $this->besitzer = $name;
    }
}
    

In diesem Beispiel wird eine Klasse Mein_Einkaufswagen definiert. Sie enthält alle Funktionen der Klasse Einkaufswagen, eine zusätzliche Variable $besitzer und die zusätzliche Funktion setze_besitzer(). Man kann den Einkaufswagen auch weiterhin wie oben erzeugen, nur kann man jetzt auch den Besitzer setzen oder herausfinden. Die alten Funktionen der Klasse Einkaufswagen können ebenfalls weiterverwendet werden.


$meinkaufswagen = new Mein_Einkaufswagen; // Kreiere einen Einkaufswagen
$meinkaufswagen->setze_besitzer ("kris"); // Name dieser Klasse
print $meinkaufswagen->besitzer;          // schreibe den Namen des Besitzers
$meinkaufswagen->fuege_hinzu ("10", 1);   // (Siehe oben, vererbt 
                                          // von Einkaufswagen)
    

Innerhalb der Funktionen einer Klasse bezeichnet die Variable $this das aktuelle Objekt. Sie können mit $this->irgendwas auf dessen Variablen und Funktionen zugreifen.

Konstruktoren sind Funktionen eine Klasse, die beim Erschaffen eines neuen Objektes automatisch aufgerufen werden. Eine Funktion wird zu einem Konstruktor, wenn Sie den gleichen Namen wie die Klasse trägt.


class Auto_Einkaufswagen extends Einkaufswagen {
    function Auto_Einkaufswagen () {
        $this->fuege_hinzu ("10", 1);
    }
}
    

Die Klasse Auto_Einkaufswagen entspricht der Klasse Einkaufswagen plus einen Konstruktor, der bereits für eine erste Füllung (1 Artikel der Nummer 10) gesorgt hat. Jeder neu erzeugte Auto_Einkaufswagen enthält so von vorneherein diesen Artikel. Konstruktoren können auch Parameter enthalten. Aber diese Parameter sind optional, und können so nützlicher eingesetzt werden.


class Konstruktor_Einkaufswagen extends Einkaufswagen {
    function Konstruktor_Einkaufswagen ($produkt = "10", $anzahl = 1) {
        $this->fuege_hinzu ($produkt, $anzahl);
    }
}
 
// Kaufe wieder den gleichen alten Kram ein.
 
$standard_einkaufswagen   = new Konstruktor_Einkaufswagen;
 
// Kaufe etwas bestimmtes ein ...
 
$anderer_Einkaufswagen = new Konstruktor_Einkaufswagen ("20", 17);
    

Achtung

Bei abgeleiteten Klassen wird der Konstruktor der Ursprungsklasse nicht automatisch aufgerufen, wenn der Konstruktor der abgeleiteten Klasse aufgerufen wird.