Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapis tablicy obiektów w sesji
Forum PHP.pl > Forum > PHP > Object-oriented programming
dudek90
Witam,

Uczę się dopiero programowania obiektowego w PHP i natrafiłem na taki problem.
Chciałbym zapisać w sesji tablicę obiektów.

Tak tworzę obiekty typu temat:
  1. while($row = mysql_fetch_assoc($result))
  2. {
  3. $id = $row['id'];
  4. $tematy[$i] = new temat($id);
  5. $i++;
  6. }
  7.  
  8. $_SESSION['tematy'] = serialize($tematy);


natomiast potem aby odwołać się do tablicy używam:

  1. $tematy = unserialize($_SESSION['tematy']);
  2.  
  3. for($i=0; $i<count($tematy); $i++)
  4. {
  5. echo '<br />';
  6. echo $tematy[$i]->GetId();
  7. }


niestety wywołanie $tematy[$i]->GetId() powoduje błąd: Fatal error: Call to a member function GetId() on a non-object in...

Sama funkcja GetId zwraca tylko jedno pole z klasy temat.

Czy ktoś mógłby mi powiedzieć gdzie popełniam błąd ?
Za wszelkie odpowiedzi z góry dziękuję.
tiraeth
1. Czy w pliku, w którym dokonujesz deserializacji masz definicję klasy, której obiekty są odtwarzane?
2. Próbowałeś serializować pojedynczy obiekt i następnie go odtworzyć?
dudek90
ad. 1. Tak
ad. 2. Tak. Pojedynczy obiekt serializowałem i normalnie się odtwarza, natomiast ta tablica obiektów już nie :/


EDIT:

Problem w końcu rozwiązałem, można zamknąć. Metodą prób i błędów, przyczyną prawdopodobnie było błędne tworzenie tablicy obiektów, ale głowy nie dam uciąć.

Poniższy kod jest poprawny:

  1. $tematy = array();
  2. while($row = mysql_fetch_assoc($result))
  3. {
  4. $id = $row['id'];
  5. $tematy[] = new temat($id);
  6. $i++;
  7. }
  8. $_SESSION['tematy'] = serialize($tematy);


i potem w drugim pliku:

  1. $tematy = unserialize($_SESSION['tematy']);
  2. for($i=0; $i<count($tematy); $i++)
  3. {
  4. echo '<br />';
  5. echo $tematy[$i]->GetId();
  6. }
tiraeth
W takim razie błąd masz gdzieś indziej. U mnie działa prawidłowo serializacja i deserializacja tablicy obiektów. Być może przekraczasz rozmiar tablicy, wtedy jak chcesz wybrać element spoza tablicy to masz non-object. Pokaż może więcej kodu, np. gdzie inicjalizujesz tablicę $tematy oraz output tego, co utworzy serialize.
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.