[php] Tablica _SESSION + mój obiekt

0

Witam

Mam problem z wpisaniem do tablicy _SESSION instancji obiektu.

session_start();

if( !$_SESSION['op'] )
{
	$_SESSION['op'] = new MojObiekt();
	echo "stworzono obiekt";
}


if(jakis_tam_warunek)
{
	$op = $_SESSION['op'];
	
	echo $op->jakies_pole;
	// echo $op->jakas_metoda();
}

Gdy odwołuję się do jakies_pole, to nic nie wypisuje, natomiast gdy do jakas_metoda() to wyrzuca błąd:

Fatal error: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "SessionOperator" of the object you are trying to operate on was loaded before unserialize() gets called or provide a __autoload() function to load the class definition in D:\Web\www\knsp\valid.php on line 19

Tak jakby nie można było przechowywać w _SESSION swoich własnych obiektów.

0

Jak pobierasz obiekt zapisany w sesji to wczesniej musisz miec gdzies definicje klasy ktorej instancja jest ten obiekt.

0

To tylko kod prowizoryczny. Oczywiście funkcja require() z definicja klasy znajduje się zaraz po session_start(). Problem polega na tym, że nie moge do tablicy wpisać instancji mojego obiektu. Na php.net znalazłem informację, że trzeba zserializować obiekt. Problem polega na tym, że w jego konstruktorze podaje instancje do kolejnego obiektu (połączenie z bazą). Chyba musze pomyśleć nad trochę innym przekazaniem tego połączenia (tak, żeby dało się go także zserializować).

Jeśli masz jakiś pomysł to napisz :)

0

Klasa powinna być widoczna w momencie wykonywania unserialize na obiektach. A więc w czasie wywoływania session_start()

0

Zmieniłem to, ale nie pomogło. Jak zmusić funckję serialize(), żeby serializowała także obiekt wewnątrz klasy?

0

dodaj metody __serialize i __unserialize w swojej klasie. Pamiętaj tylko o tym, że połączenia z bazą nie da się serializować. Sam uchwyt zapiszesz, ale wraz z końcem skryptu wszelkie połączenia są zamykane. W __unserialize będziesz musiał stworzyć nowe połączenie.

0

Oks, nie ma problemu - połączenie mogę zamknąć, byle tylko info o użytkowniku mi nie przepadało (bo właśnie to zawiera obiekt, który chce zserializować). Pokombinuje. Dzięki za porady :)

0

Takie sprostowanie:

@nav
Nie miałeś przypadkiem na myśli metod __sleep i __wakeup? Nie miałem czasu, ale dziś siadłem do tego i w sumie z zastosowaniem dwóch powyższych wszystko śmiga.

1 użytkowników online, w tym zalogowanych: 0, gości: 1