Objekte serialisieren - Objekte in Sessions
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
.