parent
Magiczne funkcje __sleep i __wakeup
Klasy i obiekty (PHP 4)
PHP Manual

## Serializacja obiektów - obiekty w sesjach

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 zostanie on zserializowany, otrzymany zostanie ciąg znakowy, który odnosi się do klasy A i zawiera wartości wszystkich zmiennych zawartych w $a. Aby istniała możliwość deserializacji 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 dołączanym przez page1.php i page2.php.

`<?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");
fwrite($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.

parent
Magiczne funkcje __sleep i __wakeup
Klasy i obiekty (PHP 4)
PHP Manual