![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 31.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Klasa 1
Klasa 2
Klasa 3
Klasa 1 jest odpowiedzialna za połączenie się z bazą danych Klasa 2 w domyśle weryfikuje dane wprowadzone przez użytkownika, Klasa 3 wprowadza operacje na danych, tworzy hasło, unikatowy kod do weryfikacji przez email, dodawanie użytkownika do bazy, edycje itp Mam problem ze zrozumieniem zasięgu zmiennych, metod, obiektów itp. Wiem, co znaczy private, public, protected ale ciężko jest mi ogarnąć to w praktyce, pisze to w przedszkolu gdyż bardzo krótko programuję a jeszcze krócej w PHP, nie chce być tu karcony przez stwierdzenia typu zrób jakiś kurs albo poczytaj książkę, gdyż do takich rozwiązań już sięgałem, rozumiem iż metodą prób i błędów człowiek uczy się najwięcej ale czy ktoś mógłby mi wytłumaczyć jak działa się i jak powinno działać się.... Klasa 1 łączy z bazą, gdy w Klasie 3 chce coś dodać do bazy to w konstruktorze wywołuję połączenie $this->pdo = Database::getDB(); Podobnie chciałbym w metodzie test() użyć metody z Klasy 2, jak powinienem to zrobić ? Powyższy kod działa poprawnie, ale moje pytanie jest takie czy muszę za każdym razem w metodzie tworzyć nowy obiekt danej klasy jeżeli chcę metodę wykorzystać z innej klasy? Da się tworzyć jakoś obiekt w konstruktorze? Zaznaczę, że połączenie z funkcją statyczną w klasie 1 w klasie 3 jest wykonane poprawnie, podczas gdy nie mam możliwości tworzenia obiektów klasy 2 w konstruktorze klasy 3 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
settery i gettery to nie magiczne metody __set i __get - tu trochę mylisz pojęcia. Chodzi o zapis typu:
Te metody, które wymieniłeś służą do czegoś innego - do obsługi odwołań do nieistniejących własności obiektu. Przeczytaj coś o hermetyzacji - to Ci dokładnie wytłumaczy jak i po co to stosować. Co do układu klas to jest ok - jeśli będziesz używał tej "weryfikacji" w wielu miejscach to dziedziczenie będzie chyba najlepszym pomysłem właśnie. Co do pytania to odpowiedź jest prosta: MODELE Ogolnie aplikacje (kod) można podzielić na 3 oddzielne części wg architektury zwanej MVC - na początek może nie zaglębiaj się w nią bo ciężko ją na początku zrozumieć. W skrócie chodzi o to by rozdzielić zarządzanie danymi od zarządzania żądaniami (przekazywanie parametrów pod podany adres, wybór odpowiedniej strony itp.) i od warstwy prezentacji. Dzieli się to na kontroler, model i widok (Model-View-Controller). Weź sobie z tego model. Model to klasa dotycząca (najczęściej) jakieś tabeli w bazie danych. Przykładowo masz tabele z użytkownikami (powiedzmy users). Tworzysz więc klasę modelu "users" albo "usersModel". W tej klasie implementujesz metody, które robią coś z użytkownikami - dodają, zapisują po edycji, kasują, pobierają z DB. W innej klasie (modelu) możesz obsługiwać inne tabele. Cel tutaj jest taki aby tabela miała swój odpowiednik w kodzie w formie klasy. Robiąc później klasę rejestracji nie implementujesz w niej zapytań SQL itp. a odwołujesz się do konkretnych metod konkretnych modeli. Możesz więc zrobić metodę rejestracja, w niej walidować dane a potem przekazać je do odpowiedniej metody (np.: "dodajUzytkownika(...)") modelu "users". Sam dostęp do bazy TY oparłeś na PDO i wzbogaciłeś to o klasę, ktora jest globalnie dostępna (poprzez odwołanie statyczne aby nie tworzyć wielu połączeń) i to tak może zostać. Tą klasę używaj w modelach. Z modelami wiąże się pewien problem - co zrobić a raczej, do którego modelu dodać metodę zwracającą jakieś łączne dane z wielu tabel bądź pracującej na wielu tabelach naraz. To jest kwestia indywidualna. Ogólnie są dwie ścieżki: 1. Metoda zostaje wrzucona do modelu po tym co zwraca. Oznacza to, że jeśli metoda pobiera na przykład produkty klienta to wrzucasz ją do modelu produktów bo ich listę będzie zwracać. 2. Metoda zostaje wrzucona do modelu po tym co przyjmuje. To z kolei oznacza, że metoda trafi do tego modelu, którego dotyczą dane (argumenty) wejściowe tej metody. Czyli jeśli pobieramy produkty klienta to podajemy w metodzie o jakiego klienta nam chodzi - więc metoda ta powinna trafić do modelu klientów. Oba podejścia są dobre i najczęściej występują mieszanie. Staraj się jednak trzymać jednej - osobiście polecam 2gą - jest bardziej intuicyjna. Tak to wygląda w kodzie:
Wybór należy do Ciebie - co dla Ciebie jest bardziej intuicyjne to wybierz (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 23:38 |