Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Powiązanie klasy User z klasą obsługi sesji
czarek1986
post
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 15.09.2008

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


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

Ten post edytował czarek1986 8.08.2009, 01:36:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
ayeo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


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!


--------------------
Go to the top of the page
+Quote Post
LBO
post
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


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.

Ten post edytował LBO 8.08.2009, 07:36:55
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 07:31