[php] Tablica _SESSION + mój obiekt

Odpowiedz Nowy wątek
2006-11-27 00:22
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.


Pozdrawia DzieX

int getRandomNumber() { return 4; }

Pozostało 580 znaków

2006-11-27 01:04
0

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


Pozostało 580 znaków

2006-11-27 16:19
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 :)


Pozdrawia DzieX

int getRandomNumber() { return 4; }

Pozostało 580 znaków

2006-11-27 16:22
nav
0

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


utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2006-11-27 18:09
0

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


Pozdrawia DzieX

int getRandomNumber() { return 4; }

Pozostało 580 znaków

2006-11-27 19:42
nav
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.


utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2006-11-27 19:59
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 :)


Pozdrawia DzieX

int getRandomNumber() { return 4; }

Pozostało 580 znaków

2006-11-29 00:48
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.


Pozdrawia DzieX

int getRandomNumber() { return 4; }

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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