Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tablice (niby) globalne.
Fluke
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

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


Witam.
Chciałem zrobić coś w stylu cache ale na tablicach. Mianowicie jeżeli użytkownik zaloguje się poprawnie to do różnych tablic robię zrzut (prawie) całej bazy. Robię to po to żeby nie łączyć się z bazą za każdym razem kiedy użytkownik przejdzie na inna podstronę. I mam taki mały problem bo nie wiem jak zrobić żeby ta tablica była widoczna wszędzie. Mam Klasę Login.class.php i tam jest metoda loadUser() i jak przejdzie wszystkie warunki to wywołuję klasę cache.class.php z metodą loadChache() która ładuje (prawie) wszystkie tabele do różnych tablic. Przechodząc dalej do metody loadUser() jak user poprawnie się zaloguje i poprawnie załaduje się baza to automatycznie zastaje prze kierowany do index.php. i tutaj mam problem bo nie wiem jak zabardzo zrobić tą tablicę (niby) globalną a nie chcę za bardzo tego umieszczać w tablicy $_SESSION.

Jeszcze wspomnę że klasa loadCache() jest wywoływana tylko raz by załadować a chciałem użyć metody type getTable1, getTable2 itp. by pobierać tablice załadowane.

Czy jest jakieś rozwiązanie, i czy w ogóle to jest dobry pomysł na ten cach?
Moim zdaniem tak bo pozbywamy się zapytań do bazy, ale wolę usłyszeć wypowiedzi ekspertów bo jeszcze nie wiem czy potrzebnie się męczę.

Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Quadina
post
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


Taki cache jest dobry do parametrów do których nie przewidujesz częstych zmian po stronie administratora i użytkownika. To co mówisz jest dość często używane i można tutaj skorzystać z wzorca projektowego singleton. Jednak nie obejdzie się bez użycia tablicy $_SESSION chociażby z tego względu, że nie ma innej drogi nie plikowo/bazodanowej na przenoszenie danych między kolejnymi wywołaniami skryptu. Na dole podaje przykładową reprezentacje takiej klasy.
  1. <?php
  2. class cache {
  3. // ma zapobiec konstruowania obiektu poza uzyciem statycznej funkcji singleton
  4. // chodzi tylko i wylacznie o utrzymanie JEDNEJ instancji tej klasy dla danej sesji
  5. private function __construct(){
  6.  
  7. }
  8. /**
  9. * @return cache
  10. */
  11. public static function getInstance(){
  12. // korzystamy z session uzywajac jakiejs unikalnej nazwy
  13. if(!isset($_SESSION['singleton/instance/cache']) || $_SESSION['singleton/instance/cache'] === null){
  14. $_SESSION['singleton/instance/cache'] = new self();
  15. }
  16. return $_SESSION['singleton/instance/cache'];
  17. }
  18. // wszystkie pozostale elementy moga byc juz takie jak zwykle
  19. private $table1 = null;
  20. private $table2 = null;
  21. public function loadCache(){
  22. $table1 = array(); // ładujemy z bazy czy skąd kolwiek
  23. $table2 = array();
  24. }
  25. public function getTable1(){
  26. return $this->table1;
  27. }
  28. public function getTable1(){
  29. return $this->table2;
  30. }
  31. }
  32.  
  33. // uzycie gdziekolwiek będziesz zaczynamy od pobrania instancji
  34.  
  35. // podczas logowania pobierasz dane do cache
  36. cache::getInstance()->loadCache();
  37.  
  38. // potem wyciagasz juz gotowe dane z tablicy
  39. $table1 = cache::getInstance()->getTable1();
  40. $table2 = cache::getInstance()->getTable2();


WADY:
Niestety takie rozwiązanie ma swoje duże minusy. Przede wszystkim nie jest do końca bezpieczne przechowywanie dużej ilości danych z baz danych w sesji. Nie koniecznie użytkownik może wyświetlić dane, które wyciągniemy - trzeba się po prostu ograniczyć do minimum z minimum w celu optymalizacji tego rozwiązania.

Raczej nie jestem za takim rozwiązaniem, ale mam nadzieje, że choć trochę pomogę (IMG:style_emoticons/default/smile.gif)
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: 7.10.2025 - 21:04