Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Długość życia pola klasy?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Largo
Witam,

Właśnie borykam się z problemem sortowanie tabeli, która ma działać w czasie rzeczywistym. O ile sortowanie działa o tyle nie mogę poradzić sobie z problemem Cache. Poniższy kod to część mojego kodu z Ajax Handler, który ma pobierać dane z bazy, ale jeżeli to pierwsze uruchomienie i nie ma danych w tablicy. O dziwo, po wywołaniu else, zapisuje do pola klasy, ale poza else zawartość tablicy znika i nie idzie jej przywrócić, dlaczego?

Próbowałem na lokalnych zmiennych, ale to nie miało sensu, więc użyłem pola klasy do tego. Czy powinienem używać referencji jak mi znajomy zasugerował? Jeżeli idę w zupełnie złym kierunku z Cache, proszę o inne porady. Nie mogę zostawić tego problemu luzem, ponieważ jeżeli nie będę dodawał do Cache, każde użycie sortowania wywoła zapytanie MySQL, a zakładając, że wejdzie do 100 osób w swoje transakcje i kliknie 3 razy to w ciągu paru minut mamy 300 zapytań, a samo zapytanie nie jest lekkie.

  1. /* Cache!
  2. * BugFix: DDoS availability!
  3. * TODO: Compare arrays to check for newer transaction
  4. */
  5. if( ( is_array( $this->transactionsCache ) && count( $this->transactionsCache ) ) )
  6. {
  7. $returnData[] = $this->transactionsCache;
  8. }
  9. else
  10. {
  11. /* Query... */
  12. $this->SQL->getTransactionsData( $memberToLoad, $sortKey, $sortOrder, $currentMonth, $actualPage, $perPage );
  13.  
  14. if( $this->DB->getTotalRows() )
  15. {
  16. while( ( $row = $this->DB->fetch() ) )
  17. {
  18. /* Add to HTML Variable */
  19. $returnData[] = $logs->parseTransaction( $row, $memberToLoad );
  20. }
  21.  
  22. /* Add to Cache */
  23. $this->transactionsCache[] = $returnData;
  24. }
  25. }


Mam nadzieję, że wskażecie mi błąd i pomożecie.

Pozdrawiam,
Largo
l0ud
Najlepiej by było, jakbyś dał gdzieś dał gdzieś cały plik tej klasy, albo chociaż uproszczony kod, który wywołuje problem.

...czy przed całym blokiem else, $this->transactionsCache już istnieje (została zadeklarowana)?. No i oczywiście pamiętasz o wczytaniu cache do $this->transactionsCache przy następnym wywołaniu skryptu?

edit: bah, wygląda na to że PHP powinien trzymać składową klasy nawet bez jej zadeklarowania. Daj pełniejszy kod klasy.
Largo
Witaj,

Problemik raczej nie aktualny... Nie wiedziałem, że to co chcę osiągnąć to cachowanie żądań Ajax :-) Po prostu, chciałem to zrobić na składowej klasy, ale to nie ma sensu, wystarczy w JS zapamiętywać dany wynik i w nim sprawdzać :-) Dziękuje za odpowiedź, ale jest ona zbędna :-)

Temat uważam za rozwiązany, chyba, że masz pewne wątpliwości, to mogę podesłać pełny kod?

Pozdrawiam,
Largo
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.