Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Powiązanie klasy User z klasą obsługi sesji
Forum PHP.pl > Forum > PHP > Object-oriented programming
czarek1986
Witam.


Pisze moją pierwszą aplickację uzywając oop. Chciałem zapytać was o radę. Nie wiem jaki będzie najlepszy sposób na powiązanie klasy obsługi sesji z klasą uzytkownika. Czy mam tworzyc za kazdym razem obiekty obydwu klas oddzielnie, czy moze przy tworzeniu obiektu uzytkownika np. w jego konstruktorze bedzie tworzony tez obiekt sesji.? A może zastosowac tutaj dziedziczenie? Do tego ostatniego rozwiązania nie jestem przekonany bo mimo ze klasy są ze sobą powiązane to oznaczają coś kompletnie innego. Chyba ze sie mylę i dziedziczenie bedzie tutaj poprawne.


Prosze o jakieś rady
Fifi209
Hmm, powiem tak: możesz użyć singletona - i tutaj apel, proszę o niewszczynanie kolejnej dyskusji na temat singleton dobry/zły. (były, a autor może je znaleźć na forum)
lub możesz napisać klasę, która będzie "pojemnikiem" na obiekty. winksmiley.jpg
ayeo
Witam!

Jeśli zaczynasz przygodę z OOP to pisanie własnego Frameworka to kiepski pomysł. Zainstaluj sobie jakieś gotowe rozwiązanie, coś małego i prostego, ale z dobrą dokumentacją. Tam zobaczysz jedno z możliwych podejść do tego zagadnienia.

W praktyce sesja niewiele ma wspólnego z Userem. W sesji możesz mieć conajwyżej metodę getUser(), któa zwróci obiekt zalogowanego Usera lub obiekt Anonimowego Usera. Samo logowanie możesz rozwiązać podobnie. Robisz metodę (w klasie Sesji) setUserAsLogged( User $user ) i tyle. Samo sprawdzanie haseł i loginów powinna załatwiać statyczna metoda login( $login, $password ) - zwraca ona obiekt Usera lub false w przypadku niepowodzenia (lub rzuca wyjątek). Jednak każdy realizuje to zagadnienie inaczej, chciałem Ci tylko pokazać jedno z możliwych - moim zdamiem niezłe winksmiley.jpg

Pozdrawiam!
LBO
Cytat(czarek1986 @ 8.08.2009, 02:36:18 ) *
Witam.

Pisze moją pierwszą aplickację uzywając oop. Chciałem zapytać was o radę. Nie wiem jaki będzie najlepszy sposób na powiązanie klasy obsługi sesji z klasą uzytkownika
Czy mam tworzyc za kazdym razem obiekty obydwu klas oddzielnie, czy moze przy tworzeniu obiektu uzytkownika np. w jego konstruktorze bedzie tworzony tez obiekt sesji.? A może zastosowac tutaj dziedziczenie? Do tego ostatniego rozwiązania nie jestem przekonany bo mimo ze klasy są ze sobą powiązane to oznaczają coś kompletnie innego. Chyba ze sie mylę i dziedziczenie bedzie tutaj poprawne.


Prosze o jakieś rady


Chcesz czy nie chcesz, obiekt Usera i obiekt odpowiedzialny za sesję (nazwijmy go Managerem) są dwoma osobnymi obiektami, które powinny być dostępne w systemie jednocześnie. Od tego stwierdzenia już prosta droga do tego, że obiekt Usera (i każdy inny, który używa sesji) powinien zawierać w sobie ten obiekt Managera i używać go wedle potrzeb.

  1. // inicjujemy managera sesji np jakiegoś configu
  2. $sessionManager = new SessionManager; // używa domyślnego plikowego przechowywania sesji.
  3.  
  4. // LUB
  5.  
  6. // używa przechowywania sesji w Bazie danych. To jest abstrakcyjne podejście - Manager
  7. // jest nakładką na zapytania do bazy i można go wykorzystać bezpośrednio ze standardowym SQL.
  8. $sessionManager = new DatabaseSessionManager($databaseName, $multiDatabaseManager);
  9.  
  10.  
  11.  
  12.  
  13.  
  14. // inicjujemy usera
  15. $sessionUser = new SessionUser($sessionManager);


Jak widzisz - jest trochę sposobów.
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.