![]() |
![]() |
![]()
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%) ![]() ![]() |
Ok przede wszystkim nie uczmy złych praktyk (IMG:style_emoticons/default/smile.gif)
Metody/własności statyczne są wygodne owszem ale przy większym projekcie i jego zarządzaniu okazują się zbyt mało "organizowalne" - zbyt prosto się do nich odwołać (są też mniej wydajne) przez co powstają złe nawyki. Najpierw co do samego zasięgu. - public - oznacza, że dana metoda/własność jest widoczna poza ciałem klasy - są to naogół metody i własności główne (te najważniejsze) danej klasy. Ich liczbę powinno się ograniczyć maksymalnie do liczby czynności jakie dana klasa ma realizować. W zasadzie poprzez HERMETYZACJE (zobacz sobie co to jest w OP) nie powinno się stosować publicznych własności klasy - powinny być do nich tzw. gettery i settery - po co to wszystko - poczytaj o tym - zrozumiesz ile to daje (IMG:style_emoticons/default/wink.gif) - private - to metody i własności, które nie muszą być dostępne na zewnątrz jakiejś klasy. Są one używane wewnątrz. Nieraz tworząc jakąś klasę wykonującą dużo czynności zajmuje ona dużo kodu - aby nie umieszczać go w jednej metodzie można go funkcjonalnie rozdzielić na metody prywatne, wykorzystywane w głównych metodach publicznych klasy. - protected - to to samo co private lecz pozwala na dziedziczenie. Możesz zrobić sobie klasę z zestawem metod chronionych (protected) i potem kolejną klasę dziedziczącą z tej właśnie. Dzięki temu możesz utworzyć kilka różnych klas dziedziczących po tej jednej, która ma metody wykrozystywane we wszystkich. To wszystko co napisałem można zastąpić metodami i własnościami statycznymi - nawet wydaje się to łatwiejsze. Niestety tak się robić nie powinno - gubi się wówczas ładną, poukładaną i logiczną strukturę aplikacji - nie mówiąc o wydajności (odwołania statyczne są sporo wolniejsze od dynamicznych). Masz 3 klasy. 1sza jest ok - połączenie z DB - tu nie mam zastrzeżeń. 2ga i 3cia wymaga zastanowienia. Czy jest to klasa, która będzie używana w wielu miejscach? Czy będzie miała więcej metod walidacyjnych? Jeśli tak to zrób inaczej i nie twórz w klasie 3ciej instancji 2giej. Niech klasa 3cia dziedziczy po 2giej. Wówczas masz od razu gotową metodę, którą możesz wywołać lokalnie bez powoływania obiektu klasy drugiej. Nie podpowiadam więcej - przemyśl to (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 01:30 |