![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Dopiero zacząłem swoją przygodę z objektowym PHP, nie wiem czy do końca dobrze rozumię zasady w nim panujące. Byłbym wdzięczny jeżeli osoba która zna się na tym, mogła mi powiedzieć gdzie popełniłem błędy (mimo tego że skrypt działa tak jak chcę, pewnie jakieś się znajdą). Klasa ma być odpowiedzialna za dodawanie treści do bazy danych, oraz ich późniejsze wyświetlanie. Aktualnie napisałem tylko dwie metody, ponieważ nie wiem czy dobrze realizuję założenia programowania obiektowego.
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
1. W klasie nie łączymy się z bazą, a już na pewno nie w każdej metocie osobno. Utwórz prywatne pole db i wrzuć do niego obiekt bazy danych przez wstrzykiwanie.
2. Klasa nie powinna niczego wyświetlać, może zwrócić dane. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź.
Jeżeli chodzi o 2. punkt, myślę że teraz chyba jest dobrze. Odnośnie 1. - nie za bardzo wiem czy dobrze zrobiłem, pierwszy raz spotkałem się z terminem "wstrzykiwania", w internecie za dużo mi się na ten temat znaleźć nie udało; już nie łączę się z bazą w klasie (pewnie i ten sposób jest do poprawy).
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
Drugi wynik z google pod zapytaniem wstrzykiwanie oop php ;p klik
możesz zwrócić tablicę danych a nie obiekt wynikający z metody query. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 103 Pomógł: 17 Dołączył: 15.12.2012 Ostrzeżenie: (0%) ![]() ![]() |
Co do nowego komponentu ktory tworzysz a uzycie DI polecam przeczytac:
http://docs.phalconphp.com/en/latest/reference/di.html mysle ze swietnie Ci to wytlumaczy dependency injection w praktyce ![]() Ten post edytował ssstrz 2.09.2013, 16:44:40 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki za rady i artykuły. Poczytałem i sądze, że sposób w jaki teraz to robię jest odpowiedni (mam nadzieję
![]()
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
Tak na szybko:
Czemu wszędzie przekazujesz $connect? Daj proteted $_db; i metodę setDb($db); Potem w metodach używasz $this->_db->query() Skoro klasa nazywa się news, po co w każdej metodzie zaznaczasz że operujesz na newsach? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za cierpliwość
![]() Nawet się już nie pytam czy teraz dobrze, tylko czy teraz lepiej jest napisany ten kod? ![]()
@up |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jest on bardzo źle napisany, zawiera luki w bezpieczeństwie oraz nie ma nic wspólnego z OOP. Wymyślono już dawno temu ORM-y, które rozwiązują Twoje problemy, a do tego są napisane poprawnie - dlaczego z nich nie skorzystasz? Uprzedzając jeszcze: 1) dużo szybciej nauczysz się znaczenie więcej 2) kod będzie działał i nie rzucał kłód pod nogi na każdym kroku 3) przy okazji poznasz i zyskasz doświadczenie w pracy z daną biblioteką.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Łamiesz przede wszystkim zasadę Single Responsibility Principle. To jest ciągle kod proceduralny tylko opakowany w klasę i nie ma (prawie) nic wspólnego z obiektowością. Bez zagłębiania się w kod klas finalnie byłoby lepiej, gdyby wyglądało to tak:
Klasa SqlConnection powinna implementować jakiś stabilny interfejs typu:
Ten post edytował em1X 27.09.2013, 11:55:10 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.08.2025 - 04:05 |