Anmerkung:
In PHP 3 verlieren Objekte während des Prozesses der Serialisierung
und Deserialisierung ihre Assoziation zur Klasse. Die resultierende
Variable ist vom Typ Objekt, hat aber keine Klasse und keine Methoden,
weshalb sie ziemlich unbrauchbar ist (Sie wurde wie ein Array, jedoch
mit einer ziemlich komischen Syntax).
| Achtung |
Die folgende Information ist nur für PHP 4 gültig.
|
serialize() gibt eine Zeichenkette zurück, die
eine Byte-Strom-Repräsentation irgendeines in PHP speicherbaren
Wertes enthält. unserialize() kann diese
Zeichenkette verwenden, um die ursprünglichen Variablenwerte
wieder herzustellen. Die Verwendung von serialize zum Speichern
eines Objektes wird alle Variablen innerhalb eines Objektes
speichern. Die Funktionen in einem Objekt werden nicht gespeichert,
sondern nur der Name der Klasse.
Um ein Objekt wieder deserialisieren zu können, muss die Klasse
dieses Objektes definiert werden. Das heißt, wenn Sie ein Objekt
$a der Klasse A in page1.php haben und dieses serialisieren,
erhalten Sie eine Zeichenkette, die sich auf die Klasse A bezieht,
und alle Werte der in $a enthaltenen Variablen enthält. Wenn Sie
$a der Klasse A in page2.php mittels unserialize wiederherstellen
möchten, muss die Definition von Klasse A in page2.php vorhanden
sein. Dies kann zum Beispiel durch das Speichern der
Klassendefiniton von Klasse A in einer Include-Datei, und das
Einbinden dieser Datei sowohl in page1.php und page2.php realisiert
werden.
Wenn Sie mit Sessions arbeiten und session_register()
verwenden, um Objekte zu registrieren, so werden diese Objekte am Ende
der PHP Seite serialisiert, und in jeder folgenden Seite automatisch
via unserialize wiederhergestellt. Das heißt, dass diese Objekte auf
jeder Ihrer Seite auftauchen können, sobald sie Teil Ihrer Session sind.
Es wird ausdrücklich empfohlen, dass Sie die Klassendefinitionen der
so registrierten Objekte in allen Ihren Seiten einbinden, auch wenn
Sie diese Klassen eigentlich nicht auf allen Ihren Seiten benötigen.
Tun Sie es nicht und wird ein Objekt ohne einer vorhandenen
Klassendefinition deserialisiert, verliert es seine Assoziation zur
Klasse, und wird zu einem Objekt der Klasse stdClass,
ohne irgendwelchen Funktionen. Das bedeutet, dass es ziemlich nutzlos
wird.
Würde also $a in dem obigen Beispiel mittels
session_register("a") ein Teil einer Session,
sollten Sie die Datei classa.inc nicht nur in
page1.php und page2.php, sondern in all Ihre Seiten einbinden.