Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesja I Obiekty
Forum PHP.pl > Forum > PHP > Object-oriented programming
styx
Czy można przechowywać obiekty w zmiennych sesyjnych? jezeli tak to jak?
Cysiaczek
serialize" title="Zobacz w manualu PHP" target="_manual i zapisujesz do zmiennej sesyjnej.
Pamiętaj jednak, że nie możesz serializować obiektów wbudowanych w php

Pozdrawiam.
Cezar708
dodam, że istnieją jeszcze funkcje magiczne: __sleep() i __wakeup() być może Ci się przydadzą.
Ludvik
Poza tym, trzeba uważać, żeby do sesji nie trafił obiekt, który może się "zestarzeć". Jeżeli jesteś pewny, że możesz te dane przechować w sesji, to nie ma problemu.
bronchos
No i oczywiście, jeśli obiekt przechowuje w swoich zmiennych inne obiekty, to je również wypadałoby serializować. A do tego wyżej wspomniane __sleep() i __wakeup().
dr_bonzo
I przy wyciaganiu obiektow z sesji (przed session start) zaladuj definicje klas tych obiektow
wrzasq
upewnij sie tez, ze nie masz wlaczonego "session.auto_start" w php.ini. inaczej, sesja bedzie rozpoczynana automatycznie na starcie PHP, a wiec zanim zdazysz zdefiniowac klasy obiektow, ktore w tej sesji przechowujesz (co oczywiscie spowoduje blad).

innymi slowy, podsumowujac wszelkie obawy i wszystkie ewentualnosci, ktore trzeba brac pod uwage bawiac sie w obiekty w sesjach, sadze, ze jezeli nie piszesz czegos wybitnie zorientowanego obiektowo, lepiej jest przechowywac tylko wartosci pol poszczegolnych skladowych w sesji i potem odtwarzac obiekt (oczywiscie nie zawsze, ale jest to znacznie pewniejsze, wiec dopuki nie trzeba, to imho nie ma co sie pchac).
Sedziwoj
Cytat(Cysiaczek @ 10.08.2007, 15:27:19 ) *

Po przypisaniu do sesji obiektu przy zapisie sesji jest automatycznie wywoływana serializacja, tylko przy własnym handlerze trzeba wymusić pierszeństwo jego wykonania, inaczej obiekty zostaną zniszczone przed zapisaniem sesji.
Cytat
Pamiętaj jednak, że nie możesz serializować obiektów wbudowanych w php


Wbudowanych, to znaczy jakich?
Nie mozna wszystkiego rodzaju "uchwytów" czyli np. połączenia do bazy danych itd. czyli szczególnie typu resource.... ale to jak widzę jest napisane w podanym przez Cysiaczek linku.

Ogólnie jeśli zaimplementujesz __sleep() i __wakeup() i obiekt będzie dostępny w czasie odtwarzania sesji to nie będzie problemów.
A te dwie metody mogą po prostu do sesji zapisywać (i odczytywać) tylko parę wartości, więc jednak chyba lepiej wykorzystywać je, niż na sztywno wykorzystywać mechanizm sesji.
koodlaty
Cytat(Cezar708 @ 10.08.2007, 16:07:02 ) *
dodam, że istnieją jeszcze funkcje magiczne: __sleep() i __wakeup() być może Ci się przydadzą.

Cytat
No i oczywiście, jeśli obiekt przechowuje w swoich zmiennych inne obiekty, to je również wypadałoby serializować. A do tego wyżej wspomniane __sleep() i __wakeup().

Zdeprecjonowane na rzecz interfejsu Serializable:

Serializable Interface Reference
Improved object serialization with the Serializable interface
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.