![]() |
![]() |
-kubek3898- |
![]()
Post
#1
|
Goście ![]() |
Witam, zaczynam dopiero zabawę z programowaniem OOP w PHP i zastanawia mnie jak ma wyglądać klasa użytkownika (logowanie, rejestracja itp.). To co napisałem do tej pory wydaje mi się zagmatwane i napisane mało profesjonalnie, a chciałbym by klasa była "ładnie" napisana. Największy problem mam z wyobrażeniem sobie w jaki sposób ma działać np. logowanie. Czy przesłane argumenty do tej metody mam porównywać wysyłając zapytanie do bazy danych, czy może wystarczą dane składowe tej klasy, które przypisuję w momencie rejestracji. Również zastanawia mnie jak i gdzie ma działać sesja? Wydaje mi się, że klasa równie dobrze działała by bez tych danych składowych takich jak login, czy adres E - Mail, jednak wtedy to straciło by sens. Może mnie ktoś naprowadzić jak taki kod powinien wyglądać?
To co dotychczas nabazgrałem:
I jeszcze jedno pytanie. Czy rzucanie wyjątków mogę wykorzystwać również do sytuacji wcale nie wyjątkowych? Takie coś działa, lecz chciałem się dowiedzieć czy nie jest to mało profesjonalne. |
|
|
![]() |
-kubek3898- |
![]()
Post
#2
|
Goście ![]() |
Wyjątki są do obsługi błędów. Działają tak, że przerywane jest działanie programu i skrypt przeskakuje do miejsca w kodzie, które będzie mogło obsłużyć ten wyjątek. Jeśli takiego miejsca nie ma, to intepreter wypisze ten błąd na ekranie. to jest okej. Ale to już nie bardzo: jeśli Login successfully, to po co wyjątek? Nie wystarczy return true albo coś w tym rodzaju? No i te wyjątki powinieneś jakoś łapać w funkcji nadrzędnej (w klauzuli try...catch), bo inaczej to bez sensu. Na przykład: Kod try { $user->login(); // jesli zostanie rzucony wyjatek, nastepna linijka w ogole nie bedzie wykonana! // dlatego mozemy założyć, że jeśli dalej się kod wykonuje, to logowanie przebiegło bez błędu // i możemy zmienic hasło // jesli natomiast cos w funkcji $user->login padło, poniższa linijka się nie wykona, // i skrypt przeskoczy do bloku catch $user->changePassword('kotek123'); // przykladowa funkcja } catch (Exception $e) { redirectToTheHomePage('wystapil blad przy logowaniu'); // wymyślona funkcja } Co do tej obsługi błędów - wiem to wszystko. Blok try i catch używam nie w samej klasie, a w pliku gdzie ta metodę z klasy wywołuje (dajmy na to index.php). Ogólnie ogarniam wyjątki, wiem do czego służą i jak się obsługuję, ale w książce Pasja C++, J. Grębosza w którymś z ostatnich rozdziałów autor wspomina, że wyjątki nie zawszę służą do spraw wyjątkowych. Można nimi właśnie sygnalizować takie rzeczy, pomyślne (w książce był akurat przykład zagnieżdżonych pętel, z której rzucano wyjątek gdy został znaleziony skarb w symulowanej grze). Tutaj użyłem tego zamiast return z dwóch powodów: - wygląda to przejrzyściej gdy wszędzie używam instrukcji throw, a nie na przemian - chciałem, by w przypadku błędu czy sukcesu funkcja zwróciła kod, oraz dodatkowo wiadomość Dziękuje bardzo za odpowiedzi oraz linki użytkownika @up. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 20:03 |