![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 21.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
jako iż to mój pierwszy post na tym forum to wypadałoby się przedstawić. Jestem 17nastolatkiem , który dopiero co raczkuje w php, pochodzącym z bardzo znanego miasta Bogatynia(7.08.2010), a na imię mam Mateusz! (IMG:style_emoticons/default/smile.gif) A przechodząc do mojego problemu, to dawniej napisałem system logowania(o ile można to tak nazwać), ale teraz jak jestem starszy i mądrzejszy, to chciałbym Go przebudować, i zaczać bardziej doceniać OOP. Oczywiście wiem, że wszystko jest tu źle, dlattego chciałbym napisać wszystko od początku. Próbuje sobie uzmysłowić ile klas potrzebuje do logowania, i chodzenia po podstronach, w których wymagane jest zalogowanie. Myślałem nad takimi: class user_auth - Autoryzacja użytkownika, znajdują sie w niej funkcje potrzebne do zalogowania, informacje o użytkowniku(user_id itp.) class session - Klasa zarządzająca sesjami oparta na bazie class account_managment - Klasa do zarządzania kontem,zmiana haseł,informacji o profilu itd. Problem mój polega na tym, że nie wiem jak te wszystkie 3 klasy połączyć, i w jaki sposób je dobrze napisać. Próbowałem w mojej aktualnej klasie wprowadzić atrybuty, takie jak user_id,user_login,user_level. Lecz odwołując się do nich w innych plikach, nie uzyskuje żadnego rezultatu. Wygląda to mniejwięcej tak: Nagłówek account.php
Nagłówek mainfile.php
Lecz w obu tych plikach nie jestem w stanie odwołać się do $class_account->user_id; W jaki sposób zoptymalizować klasy? Poniżej skrypt logowania o którym wcześniej wspominałem.
Pozdrawiam, Mateusz |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 41 Dołączył: 6.04.2009 Skąd: Gdańsk/okolice Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj sobie o MVC.
W skrócie - najlepiej zrobić z usera model "User", gdzie przechowujesz sobie dane z bazy. Dodatkowo, możesz w nim przechowywać dane z sesji - te które dotyczą usera. Do tego kontroler do logowania, wylogowania, zmiany danych itp. Po zalogowaniu ustawiasz odpowiednie flagi w modelu (a konkretnie w danych zapisywanych w sesji). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Poczytaj sobie o MVC. Czy MVC to już odpowiedź na każde pytanie jakkolwiek związane z OOP? Po pierwsze co ono ma tutaj w ogóle do rzeczy? Pytanie dotyczy mechanizmu autoryzacji oraz podstawowych "elementów" OOP takich jak współpraca obiektów czy projektowanie klas.Cytat Dodatkowo, możesz w nim przechowywać dane z sesji - te które dotyczą usera. Nie powinien na jeden obiekt zrzucać odpowiedzialności za kompletnie różne rzeczy.Co do tematu... 1. PHP ma słabo rozpowszechnione konwencje dot. nazewnictwa, stylu formatowania kodu, itp. Ma jeszcze problemy z konfliktami tych konwencji z ery przed i po wprowadzaniu OOP do języka. Nie mniej jednak ma je, więc trzymaj się nich. Nazewnictwo klas: http://groups.google.com/group/php-standar...-final-proposal Nazewnictwo zmiennych: camelCase 2. Używaj mechanizmów automatycznego ładowania klas (ang. autoloading) 3. Unikaj wielokrotnego zagnieżdżania bloków. Pamiętaj, że większość konstrukcji typu: Da się zastąpić przez dużo czytelniejsze:
4. Jak chcesz pisać obiektowo to pisz obiektowo. Nie twórz funkcji (nie unikniesz korzystania z natywnych funkcji ponieważ PHP bibliotekę standardową ma właściwie w pełni strukturalną), nie korzystaj z globalnej przestrzeni nazw. 5. Od obsługi błędów są wyjątki, a nie jakieś nie do końca wiadomo co... 6. Jeden obiekt - jedno zadanie - tej regułki wyucz się na pamięć. Czyli z obiektu odpowiedzialnego za autoryzację użytkownika wylatują śmieci związane z wyświetlaniem komunikatów użytkownikowi. Cytat Próbuje sobie uzmysłowić ile klas potrzebuje do logowania, i chodzenia po podstronach, w których wymagane jest zalogowanie. Z OOP w PHP wiąże się jedna potworna wada. Jeżeli chcesz szkielet aplikacji napisać obiektowo musisz właściwie wszystko napisać samemu.Co potrzebujesz do najprostszej strony gdzie da się jedynie zalogować i poruszać po podstronach? - Obiektu reprezentującego żądanie (Request) i odpowiedź (Response). Ten pierwszy będzie zawierać informacje o parametrach żądania, czyli m.in. dane ze zmiennych superglobalnych GET/POST/SERVER/COOKIE/FILES. Ten ostatni to przede wszystkim wygenerowana treść strony i nagłówki do zwrócenia użytkownikowi. - Obsługa sesji, czyli obiekt Session udostępniający dane z sesji oraz pomocniczy obiekt pozwalający na zapisanie tych danych w bazie (implementujący odpowiedni interfejs) - Obsługa bazy danych - tu akurat jest dobrze, bo PHP ma wbudowane PDO - Kilka obiektów do reprezentacji i zarządzania danymi biznesowymi - w tym przypadku chodzi o Użytkownika. Potrzebujesz obiekt, który będzie go reprezentować, kolejny który będzie w stanie go zapisywać (np. w bazie danych), kolejny który będzie pozwalać przeszukiwać ową bazę i zwracać użytkowników. Tutaj właściwie od razu możesz wykorzystać jakiś gotowy ORM np. Doctrine2. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 21.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Co do tematu... 1. PHP ma słabo rozpowszechnione konwencje dot. nazewnictwa, stylu formatowania kodu, itp. Ma jeszcze problemy z konfliktami tych konwencji z ery przed i po wprowadzaniu OOP do języka. Nie mniej jednak ma je, więc trzymaj się nich. Nazewnictwo klas: http://groups.google.com/group/php-standar...-final-proposal Nazewnictwo zmiennych: camelCase 2. Używaj mechanizmów automatycznego ładowania klas (ang. autoloading). Przeczytane, zrozumiane i zapamiętane! Dzięki Załóżmy, że mamy coś takiego:
To jak później się odwołać, do klasy wyświetlającej użytkownikowi 'błędy' logowania(konto nie zaaktywowane itp.)? Cytat Co potrzebujesz do najprostszej strony gdzie da się jedynie zalogować i poruszać po podstronach? - Obiektu reprezentującego żądanie (Request) i odpowiedź (Response). Ten pierwszy będzie zawierać informacje o parametrach żądania, czyli m.in. dane ze zmiennych superglobalnych GET/POST/SERVER/COOKIE/FILES. Ten ostatni to przede wszystkim wygenerowana treść strony i nagłówki do zwrócenia użytkownikowi. - Kilka obiektów do reprezentacji i zarządzania danymi biznesowymi - w tym przypadku chodzi o Użytkownika. Potrzebujesz obiekt, który będzie go reprezentować, kolejny który będzie w stanie go zapisywać (np. w bazie danych), kolejny który będzie pozwalać przeszukiwać ową bazę i zwracać użytkowników. Tutaj właściwie od razu możesz wykorzystać jakiś gotowy ORM np. Doctrine2. Rozumiem, że mam takie klasy:
Wielkie dzięki za pomoc! Pozdrawiam, Mateusz. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Przecież napisałem, że od błędów są wyjątki, a nie zwracanie 0/1.
2. Cytat To jak później się odwołać, do klasy wyświetlającej użytkownikowi 'błędy' logowania(konto nie zaaktywowane itp.)? Tutaj wchodzisz w temat obsługi formularzy, czyli zagadnienia dosyć skomplikowanego - w tym celu powstają całe "subframeworki" w popularnych projektach.3. Cytat Tylko, nie mam pojęcia w jakim celu mam wykorzystać tą klase. Filtracja przesyłanych danych? Pisząc o obiekcie Request miałem na myśli obiekt reprezentujący żądanie HTTP. A chyba wiesz jakie dane zawiera takie żądanie?4. Cytat // Funkcje ,które wyświetlają użytkownikowi komunikaty(np. złe hasło/login, brak aktywacji konta). Pisząc o obiekcie Response miałem na myśli obiekt reprezentujący odpowiedź HTTP, czyli zestaw nagłówków (jak np. ciasteczka, prośba o przekierowanie, informacja o zarządzaniu pamięcią tymczasową) i treść odpowiedzi (którą generuje skrypt).5. Cytat Funkcje, które wykonują takie czynności jak: Za każdym razem, gdy do opisu obiektu potrzebujesz używać spójnika "i" oznacza to, że najprawdopodobniej powinieneś podzielić go na mniejsze obiekty odpowiedzialne za poszczególne zadania. Oczywiście "dodaj/usuń/zmień" itp. traktuje się jako jedno.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 21.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Cytat 1. Przecież napisałem, że od błędów są wyjątki, a nie zwracanie 0/1. Czyli mój kod wtedy wyglądałby w ten sposób:
Cytat 3. Pisząc o obiekcie Request miałem na myśli obiekt reprezentujący żądanie HTTP. A chyba wiesz jakie dane zawiera takie żądanie? Zawiera informacje o Nas samych jeśli się nie myle? Cytat 5. Za każdym razem, gdy do opisu obiektu potrzebujesz używać spójnika "i" oznacza to, że najprawdopodobniej powinieneś podzielić go na mniejsze obiekty odpowiedzialne za poszczególne zadania. Oczywiście "dodaj/usuń/zmień" itp. traktuje się jako jedno. Czy tak wyglądała by klasa, która jest odpowiedzialna za logowanie?
Pozdrawiam, Mateusz |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 20:15 |