Konstruktoren
Achtung |
In PHP 3 und PHP 4 verhalten sich die Konstruktoren
unterschiedlich. Die PHP 4 Semantik wird dringend empfohlen.
|
Konstruktoren sind Funktionen innerhalb einer Klasse, die
automatisch aufgerufen wird, sobald Sie mittels
new eine neue Instanz erstellen. In PHP 3
wird eine Funktion zum Konstruktor, wenn sie den gleichen Namen
wie die Klasse hat. In PHP 4 wird eine Funktion zum Konstruktor,
wenn sie den gleichen Namen wie die Klasse hat, in der sie
definiert ist. Der Unterschied ist subtil, aber entscheidend
(siehe unten).
Die Klasse Auto_Cart entspricht der Klasse Cart und hat einen
Konstruktor, der Cart bereits mit einem Artikel der Nummer "10"
initialisiert, sobald ein neuer Auto_Cart mittels "new" erstellt
wird. Konstruktoren können Argumente übernehmen, die optional
sein können, was sie sehr praktisch macht. Um eine Klasse auch
ohne Parameter verwenden zu können, sollten alle Parameter für
Konstruktoren optional sein, indem sie mit Standardwerten
ausgestattet werden.
Sie können auch den Operator @ verwenden, um
Fehlermeldungen innerhalb des Konstruktors zu unterdrücken, z.B.
@new.
Achtung |
In PHP 3 haben abgeleitete Klassen und Konstruktoren ein paar
Einschränkungen. Sie sollten das folgende Beispiel sorgfältig
lesen, um diese Einschränkungen zu verstehen.
|
In PHP 3 wird bei dem obigen Beispiel kein Konstruktor aufgerufen.
Die Regel in PHP 3 besagt: 'Ein Konstruktor ist eine Funktion mit
dem selben Namen wie die Klasse'. Der Name der Klasse ist B, und
nachdem in Klasse B keine Funktion namens B() existiert, passiert
nichts.
Dies ist in PHP 4 mit der Einführung einer anderen Regel behoben:
Wenn eine Klasse keinen Konstruktor hat, wird der Konstruktor der
Basisklasse aufgerufen, so dieser existiert. Das obige Beispiel
hätte in PHP 4 also 'I am the constructor of A.<br>' ausgegeben.
In PHP 3 wird die Funktion B() in der Klasse A plötzlich zum
Konstruktor in Klasse B, auch wenn dies nie beabsichtigt war.
Die Regel in PHP 3 lautet: 'Ein Konstruktor ist eine Funktion
mit dem gleichen Namen wie die Klasse'. PHP 3 kümmert sich nicht
darum, ob die Funktion in Klasse B definiert, oder ob sie nur
vererbt wurde.
Dies ist in PHP 4 mit einer modifizierten Regel behoben: 'Ein
Konstruktor ist eine Funktion mit dem selben Namen wie die Klasse,
in der sie definiert wurde'. So hätte die Klasse B in dem obigen
Beispiel keinen eigenen Konstruktor, und würde der Konstruktor
der Basisklasse aufgerufen, welcher 'I am the constructor of
A.<br>' ausgeben würde.
Achtung |
Weder PHP 3, noch PHP 4 rufen vom Konstruktor der abgeleiteten
Klasse aus automatisch Konstruktoren der Basisklasse auf. Wenn
angebracht, ist der Aufruf von Konstruktoren aufwärts Ihre
Aufgabe.
|
Anmerkung:
In PHP 3 und PHP 4 gibt es keine Destruktoren. Stattdessen können
Sie register_shutdown_function() verwenden, um
die meisten Effekte von Destruktoren zu simulieren.
Destruktoren sind Funktionen die automatisch aufgerufen werden, wenn
ein Objekt entweder mittels unset(), oder durch
Verlassen des Gültigkeitsbereiches zerstört wird. Es gibt in PHP
keine Destruktoren.