Forum und email

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.

Hinweis: 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.

Example#1 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.

Example#2 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

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

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