| |
| * Link führt ins Internet |
|
| |
Konstruktoren und Destruktoren
|
|
Die bisherigen Darstellungen lassen vielleicht bei dem einen oder anderen den Verdacht aufkommen, dass die objektorientierte Programmierung sich für eine Vielzahl von Projekte eignet und die ist genau das was wir bezwecken, daher sind wir noch nicht am Ende. Es gilt weitere Bestandteile kennen zu lernen.
Oft werden Sie für ein Objekt einen bestimmten Anfangszustand benötigen. Es wäre eine Möglichkeit, als Erstes immer eine Methode init() aufzurufen, die sämtliche Variablen mit den nötigen Ausgangswerten versorgt. Die Meisten objektorientierten Sprachen bieten hierfür eine direkte Unterstützung an. Es gibt dort den Begriff des Konstruktors. Dies ist eine Methode, die immer beim Erzeugen einer Instanz aufgerufen wird. Entsprechend räumt der Destruktor beim Zerstören des Objekts wieder auf.
Einsatz von Destruktoren
Eine komplexe Speicherverwaltung wie in C++ kennt PHP nicht. Solche Prozesse laufen im Hintergrund automatisch ab. Einmal erzeugte Objekte haben ohnehin nur eine Lebensdauer innerhalb des Skripts, mit dem Sprung zum nächsten Skript werden sämtliche Speicherobjekte gelöscht. Der Aufwand einer Löschung des Speichers lohnt daher nicht. Entsprechend stehen in PHP auch keine Destruktoren zur Verfügung.
Einsatz von Konstruktoren
Im Gegensatz zu den Destruktoren, die in PHP nicht zur Verfügung stehen, können Sie sich aber einen Konstruktor erzeugen. Ein zusätzliches Schlüsselwort wird hierzu nicht benötigt, die Methode, die als Konstruktor dient, wird einfach wie die Klasse benannt. Die Klasse ext_warenkorb könnte also leicht um einen Konstruktor ext_warenkorb() erweitert werden, welcher dafür sorgt das beim Anlegen einer Instanz bereits ein Standardartikel angelegt wird.
class ext_warenkorb extends warenkorb
{
function artikelEntfernen($artnr) {
unset($this->artikel[$artnr]);
unset($this->stueckzahl[$artnr]);
}
function ext_warenkorb() {
$this->eintragen("0000","Katalog");
}
}
|
Somit wird jeder Warenkorb mit dem aktuellen Katalog vordefiniert. An der Instanziierung der Klasse mit new ändert sich nichts. Konstruktoren unterscheiden sich auch sonst nicht von normalen Funktionen.
Besonderheit
Sollten Sie im Konstruktor einen Rückgabewert mit return definieren, wird dieser Wert beim Aufruf verloren gehen. Sie können jedoch die Konstruktormethode jederzeit explizit aufrufen:
echo $meinWarenkorb->ext_warenkorb();
|
Ebenso können der Methode Parameter übergeben werden. Betrachten Sie sich folgenden Beispiel:
<pre>
<?php
// Klasse
class person
{
var $vorname;
var $nachname;
var $alter;
// Konstruktor
function person($vn, $nn, $alt) {
$this->vorname = $vn;
$this->nachname = $nn;
$this->alter = $alt;
}
// Methode
function datenAusgeben() {
echo "Personendaten:<br>";
foreach ($this as $key=>$element) {
echo "$key $element<br>";
}
}
}
// Objekt erzeugen
$meineSchwester = new person("Caroline","Kannengiesser",25);
// Ausgabe der Struktur des Objekts
print_r($meineSchwester);
// Ausgabe der Personendaten
$meineSchwester->datenAusgeben();
?>
</pre>
|
Ausgabe
person Object
(
[vorname] => Caroline
[nachname] => Kannengiesser
[alter] => 25
)
Personendaten:
vorname Caroline
nachname Kannengiesser
alter 25
|
Wie Sie sehen ist die Übergabe von Parametern an den Konstruktor ohne weiteres möglich.
|
|
|
|
|
|
|