PHP Handbuch
Zurück | Kapitel 19. Klassen und Objekte (PHP 5) | Weiter

# Konstruktoren und Destruktoren

## Konstruktor

void __construct ( [mixed args [, ...]] )

PHP 5 erlaubt es Entwicklern, Konstruktormethoden für Klassen zu deklarieren. Klassen mit Konstruktormethoden rufen diese für jedes neu erzeugte Objekt auf, so dass Konstruktoren für alle Initialisierungen passend sind, die das Objekt brauchen könnte bevor es benutzt wird.

> Anmerkung: Konstruktoren von Vaterklassen werden nicht implizit aufgerufen, wenn die Kindklasse einen Konstruktor definiert. Um einen Vaterkonstruktor zu benutzen ist ein Aufruf von parent::__construct() innerhalb des Kindkonstruktors notwendig.

Beispiel 19-7. Die neuen, vereinheitlichten Konstruktoren verwenden
`<?php class BaseClass { function __construct() { print "Im BaseClass Konstruktor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "Im SubClass Konstruktor\n"; } } $obj = new BaseClass(); $obj = new SubClass(); ?>`

Für die Abwärtskompatibilität sucht PHP 5 nach einer Konstruktorfunktion nach dem alten Stil mit dem Namen der Klasse, falls es keine __construct() Funktion für eine Klasse findet. Effektiv bedeutet das, dass der einzige Fall mit Kompatibilitätsproblemen derjenige einer Klasse mit dem Namen __construct() ist, welche für andere Zwecke benutzt wird.

## Destruktor

void __destruct ( void )

PHP 5 führt ein Destruktorkonzept ähnlich dem anderer objektorientierter Programmiersprachen wie C++ ein. Die Destruktormethode wird aufgerufen, sobald alle Referenzen auf ein bestimmtes Objekt entfernt werden oder wenn das Objekt explizit zerstört wird.

Beispiel 19-8. Destruktor Beispiel
`<?php class MyDestructableClass { function __construct() { print "Im Konstruktor\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "Zerstoere " . $this->name . "\n"; } } $obj = new MyDestructableClass(); ?>`

Wie Konstruktoren auch, werden Vaterdestruktoren nicht implizit durch die Engine aufgerufen. Um einen Vaterdestruktor zu benutzen muss man explizit die Funktion parent::__destruct() in der Destruktorimplementierung aufrufen

> Anmerkung: Der Destruktor wird während der Skript Abschaltung aufgerufen, weshalb die Header immer bereits gesendet sind.

> Anmerkung: Der Versucht eine Exception aus einem Destruktor heraus zu werfen wird einen fatalen Fehler auslösen.

Zurück | Zum Anfang | Weiter
Autoloading | Nach oben | Sichtbarkeit