Serializacja
obiektów
-
obiekty
w
sesjach
Notatka
:
W
PHP
3
obiekty
tracą
powiązania
między
klasami
w
czasie
procesu
serializacji
i
odserializacji
.
Wynikowa
zmienna
będzie
typu
obiekt
,
ale
bez
klasy
i
bez
metod
,
a
więc
w
zasadzie
bezużyteczną
(
zostanie
poprostu
zmienną
ze
śmieszną
składnią
)
.
Uwaga
!
|
Poniższe
informacje
dotyczą
tylko
PHP
4
.
|
serialize(
)
zwraca
string
będący
reprezentacją
dowolnej
wartości
,
która
może
być
przechowywana
przez
PHP
.
unserialize(
)
może
użyć
tego
stringu
aby
odtworzyć
orginalne
wartości
zmiennej
.
Użycie
serializacji
do
zapisania
obiektu
zachowa
wszystkie
zmienne
z
obiektu
.
Zapisane
nie
będą
funkcje
z
obiektu
,
a
jedynie
nazwa
klasy
.
Aby
istniała
możliwość
użycia
funkcji
unserialize(
)
do
odzyskania
obiektu
,
musi
być
zdefiniowana
klasa
tego
obiektu
.
Oznacza
to
,
że
jeśli
obiekt
$a
klasy
A
istnieje
na
page1.php
i
zserializujesz
go
,
otrzymasz
string
,
który
odnosi
się
do
klasy
A
i
zawiera
wartości
wszystkich
zmiennych
zawartych
w
$a
.
Jeśli
chcesz
,
aby
istniała
możliwość
odserializacji
tego
obiektu
na
page2.php
,
na
page2.php
musi
istnieć
definicja
klasy
A
.
Można
to
zrobić
na
przykład
przez
przechowywanie
definicji
klasy
A
w
zewnętrznym
pliku
includowanym
przez
page1.php
i
page2.php
.
Jeśli
używasz
sesji
i
session_register(
)
do
rejestracji
obiektów
,
te
obiekty
są
serializowane
automatycznie
na
końcu
każdej
strony
PHP
i
odserializowane
automatycznie
na
każdej
z
następnych
stron
.
Zasadniczo
znaczy
to
,
że
te
obiekty
mogą
pokazać
się
na
dowolnej
z
twoich
stron
jeśli
tylko
staną
się
częścią
twojej
sesji
.
Mocno
zalecane
jest
includowanie
definicji
klas
wszystkich
zarejestrowanych
obiektów
na
wszystkich
twoich
stronach
,
nawet
jeśli
nie
używasz
tych
zmiennych
na
twoich
stronach
.
Jeśli
tego
nie
zrobisz
a
obiekty
zostaną
odserializowane
bez
definicji
klasy
,
powiązania
klasowe
zostaną
utracone
a
obiek
stanie
się
obiektem
klasy
stdClass
bez
żadnych
dostępnych
funkcji
,
a
więc
będzie
całkiem
bezużyteczny
.
A
więc
jeśli
w
powyższym
przykładzie
$a
stanie
się
częścią
sesji
przez
wywołanie
session_register(
"a"
)
,
powinieneć
includować
plik
classa.inc
na
wszystkich
stronach
,
nie
tylko
page1.php
i
page2.php
.