Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z serializacją obiektu
vegelus
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 31.05.2005

Ostrzeżenie: (0%)
-----


Witam

Mam problem z serializacją obiektu posiadającego inne obiekty. Może przykład coś wyjaśni:
  1. class Map{
  2. private $wys;
  3. private $sze;
  4. private $map = array();
  5.  
  6. function __construct($wys,$sze){
  7. $this->wys = $wys;
  8. $this->sze = $sze;
  9. //przypisanie w map do każdego pola klasy obiektu z klasy field
  10. for ($x = 1; $x <= $this->sze; $x++) {
  11. for ($y = $this->wys; $y >= 1; $y--) {
  12. $losowa = rand(1, 4);
  13. $picPath = 'flor' . $losowa . '.png';
  14. $this->map[$y][$x] = new field($picPath);//obiekt nic nie robi poza przechowywaniem patha do obrazka i contentu pola
  15. }
  16. }
  17. }
  18.  
  19. function __sleep(){
  20. for ($x = 1; $x <= $this->sze; $x++) {
  21. for ($y = $this->wys; $y >= 1; $y--) {
  22. $_SESSION['maps'][$y][$x] = serialize($this->map[$y][$x]);
  23. }
  24. }
  25. return array('sze', 'wys');//chcę serializować tylko te dwa atrybuty
  26. }
  27. }


Efekt serializacji poszczególnych pól tablicy map jest prawidłowy ale w przypadku serializacji obiektu map :
  1. if (!isset($_SESSION['map'])) {
  2. $map = new map(4, 4);
  3. $_SESSION['map'] = serialize($map);
  4. } else {
  5. $map = unserialize($_SESSION['map']);
  6. }



Serializacji usilnie ładuje do sesji wszystko z obiektu łącznie atrybutem map, który już wcześniej sobie do sesji zapisałem i w __wakeup pobrałem z powrotem.

Jak zrobić aby serializując obiekt zapisać sobie proste zmienne a pozostałe serializować ręcznie.
A może jest jakiś inny lepszy sposób radzenia sobie z obiektami zawierającymi inne obiekty?


ps. poprawiłem (IMG:style_emoticons/default/smile.gif) pisałem z ręki gdyż klasa zainteresowana serializacją ma już ponad 1000 linii i nie widziałem sensu jej tu całej pchać. Jest to wycinek tej klasy generujący moją frustrację oraz błąd.

Ten post edytował vegelus 24.03.2010, 14:34:13
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 19:44