Serializacja obiektów - obiekty w sesjachPodręcznik PHPPoprzedniRozdział 13. Klasy i ObiektyNastępnySerializacja obiektów - obiekty w sesjachNotatka:
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.
classa.inc:
class A
{
var $jeden = 1;
function pokaz_jeden()
{
echo $this->jeden;
}
}
page1.php:
include("classa.inc");
$a = new A;
$s = serialize($a);
// przechowaj $s gdzieś, gdzie page2.php będzie mogła go znaleźć
$fp = fopen("store", "w");
fputs($fp, $s);
fclose($fp);
page2.php:
// to jest niezbędne aby funkcja unserialize działała prawidłowo.
include("classa.inc");
$s = implode("", @file("store"));
$a = unserialize($s);
// teraz użyj funkcji pokaz_jeden z obiektu $a.
$a->pokaz_jeden();
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.
PoprzedniSpis treściNastępnyparentPoczątek rozdziałuMagiczne funkcje __sleep i __wakeup
Wyszukiwarka
Podobne podstrony:
language oop serializationlanguage oop serializationlanguage ooplanguage ooplanguage oop magic functionslanguage oop newreflanguage oop newreflanguage oop newreflanguage oop magic functionslanguage ooplanguage oop constructorlanguage oop magic functionslanguage oop constructorwięcej podobnych podstron