![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 1 Dołączył: 2.10.2007 Ostrzeżenie: (0%)
|
Witam,
Projektuję pewną aplikację w PHP/MySQL. Od razu dodam, że nie jestem ekspertem, robię to na własne potrzeby i do obiektówki jeszcze nie dojrzałem. Ogólnie wszystko działa jak trzeba ale robi mi się trochę bałagan w kodzie - miesza się HTML z PHP. Wiem, że dobrą metodą jest oddzielenie warstwy wyświetlania, od kodu PHP ale nie bardzo wiem jak to zrobić. I teraz aby sobie troche posprzątać, kod chciałem pewne rzeczy pochować do poszczególnych funkcji. Problem mam wtedy gdy dana funkcja ma się łączyć z MySQL i pobierać jakieś dane. Do połącznia z bazą używam klasy EZ_SQL (http://justinvincent.com/ezsql) i pojawiają mi się błędy gdy chcę w środku mojej funkcji łączyć się z bazą za pośrednictwem klasy EZ_SQL. Czy to w ogóle możliwe? Jak mogę to przeskoczyć? Jak to ułatwić, posprzątać? Wiem, że najlepiej byłoby zrobić całóść w modelu MVC, mieć kontrolery, szablony itp. ale tak jak wspomniałem nie jestem programistą i na razie nie mam możliwości przerabiać wszystkiego od nowa. Co mógłbym zrobić z kodem aby ułatwić sobie pracę i mieć porządek na etapie już istniejącego kodu? |
|
|
|
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
To moze bys pokazal jak probujesz sie laczyc oraz jakei to bledy..... wrozbita pietro wyzej.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 1 Dołączył: 2.10.2007 Ostrzeżenie: (0%)
|
Nospor, oczywiście już uściślam:
Poniżej przykład fragmentu kodu, który na stronie wyświetla dane z bazy.
Ponieważ używam tej tabeli kilka razy chciałem przenieść ten fragment do funkcji typu:
... i na głównej stronie wywoływać tylko kilka razy tę samą funkcję. Niestety ten sposób nie działa, bo nie mogę wywołać klasy EZ_AQL wewnątrz funkcji, czyli "$db->get_results" Jeśli coś jeszcze nie jasne proszę o informacje. |
|
|
|
Post
#4
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Zmienna $db nie jest widoczna w funkcji....
1) Poczytaj w manualu o zasiegu zmiennych 2) ALbo przekazuj do funkcji jako parametr te $db 3) Albo przeczytaj to http://forum.php.pl/index.php?showtopic=227036&hl=new+T1 tu masz napisane jak przekazywac obiekt bazy do klas. Posrednio niektore metody z tamtego tematu dotycza i ciebie |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 1 Dołączył: 2.10.2007 Ostrzeżenie: (0%)
|
NOSPOR: dzięki za odpowiedzi i porady.
Stworzyłem coś mi działa. Jako, że jest to mój pierwszy kod w obiektówce, mam prośbę abyś rzucił tylko okiem czy to co napisałem jest zgodne z zasadą.
|
|
|
|
Post
#6
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
zle. W linku co ci podalem masz jasno napisane ze:
1) Nie dziedziczy sie po klasie DB 2) Nie tworzy sie w klasie wlasnych obiektow DB |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 1 Dołączył: 2.10.2007 Ostrzeżenie: (0%)
|
Rozumiem to co piszesz, ale nie bardzo wiem jak to przerobić żeby było zgodnie ze sztuką.
Czy to oznacza, że w moich klasach w ogóle nie powinienem używać EZ_SQL? Do tej pory używałem go gdyż jest dla mnie bardzo wygodny i popularnie stosowany (np. WordPress go używa). Czy mógłbyś mi jakiś przykład dać jak to powinienem zrobić, bez dziedziczenia db? Chciałbym przejść z pisania strukturalnego na obiektowe, ale wolałbym wiedzieć jak zrobić porządnie chociaż proste rzeczy - takie właśnie jak połączenie z bazą i wyciągnięcie danych. |
|
|
|
Post
#8
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Oczywiscie ze masz uzywac obiektu DB. ALe masz go do klasy przekazywac z zewnatrz.
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 1 Dołączył: 2.10.2007 Ostrzeżenie: (0%)
|
Nospor: ok, chyba rozumiem.
Nie chcę iść na łatwiznę - próbuję coś sam zrobić ale idzie jak po gruzie. Przsepisałem to mając na uwadze to co piszesz:
Czy teraz dobrze? Lepiej? Jeśli nie to prośba o pomoc, konkretny kod który by działał i był zgodny z zasadami. |
|
|
|
Post
#10
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Tak, teraz lepiej (IMG:style_emoticons/default/smile.gif)
Ale skoro przekazujesz $db do konstruktora, to dobrze by bylo bys to $db zapamietal jako wlasciwosc klasy i mogl przez $this sie do niej wszedzie odwolywac. |
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 1 Dołączył: 2.10.2007 Ostrzeżenie: (0%)
|
Nospor,
Wgryzam się powoli w temat OOP, ale idzie mi to opornie. Masz racje, fajnie byłoby zapamiętać własciwości ale nie wiem jak to zrobić. Czy mogę prosić Cię o modyfikację mojego kodu? |
|
|
|
Post
#12
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Wlasciwosci klasy to sa podstawy klas i obiektow. W manualu php jest dział na temat klas i tam te wszystkie podstawy są wyjasnione.
|
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 1 Dołączył: 2.10.2007 Ostrzeżenie: (0%)
|
Nospor: Wracam do tematu programowania obiektowego i pozwolę sobie wrócić do pytania.
Czy poniższy rodzaj programowania i łączenia z bazą jest ok:
|
|
|
|
Post
#14
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
1) Obiekt klasy bazy danych nie powinien byc tworzony w klasie klienta. Obiekt ten, ma byc tworzony oddzielnie i przekazywany do klasy klienta
2) Klasa nie powinna pluc ECHem wiadomosci. Klasa najlepiej powinna rzucac wyjątkami, gdy coś pojdzie nie tak 3) Bez sensu jest tworzyc metody podajImie, podajFirme... gdy bedziesz chcial pobrac dane danego usera, to bedziesz musial wywolan x takich metod, a kazda na dodatek leci z zapytaniem do bazy. Ma byc jedna metoda: podajKlienta i ona zwroci tablice danego usera A juz w ogole najlepiej pownna byc klasa Klient, ktora by miala wlasciwosci takie jakie tabela Klienta. |
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 21:13 |