![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 28.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie piszę ponieważ mam od dłuższego czasu problem związany z programowaniem obiektowym, otóż staram się uczyć, ale nie jakoś chce do tej głowy wpadać, no ale do rzeczy otóż staram się pisać jakieś klasy w nich metody, ale większość z nich wymaga połączenia z bazą danych i wychodzi że na 10 klas w każdej mam w konstruktorze coś takiego:
W programowaniu obiektowych chyba podstawowym założeniem jest aby kod się nie powtarzał i żeby jeden napisany kod był wykorzystywany wiele razy, a w moim przypadku wygląda to zupełnie odwrotnie.. Proszę o jakieś naprowadzenie mnie na tą właściwą drogę w mojej i tak już pomieszanej nauce. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 289 Pomógł: 77 Dołączył: 5.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
napisz sobie prosty sterownik (klase) do mysql, potem używaj jej dowoli. Raz napisany kod wykorzystasz w każdym miejscu aplikacji. Przykładów jest bardzo dużo, poszukaj tu na formu lub google.Pozdr
-------------------- awake
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 28.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Słowo kluczowe "sterownik" otworzyło mi bramę do wielu nowych lektur do analizy
![]() Załóżmy że już mam taki sterownik i teraz mi wychodzi na to że będę musiał w konstruktorze tworzyć nowy egzemplarz klasy? Edit: Teraz pomyślałem przecież mogę chyba skorzystać z rozszerzenia wbudowanego w php mysqli? Wiec pozostaje pytanie jak się do tego odwołać. Ten post edytował fannet 31.01.2009, 12:22:30 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 7 Dołączył: 31.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie widzę niczego złego w twojej klasie. Dodaj destruktor i wykorzystaj wzorzec Singleton, a obiekt inicjuj na początku dokumentu i się nie przejmuj połączeniem w innych klasach.
-------------------- Nie zapomnij o
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
tak jak juz kolega wyżej napisał napisz sobie sterownik bazy danych a potem.
dołącz go do każdej z klas. Ten post edytował skowron-line 31.01.2009, 13:36:08 -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 7 Dołączył: 31.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
@UP: Właśnie nie o to mi chodziło :]. Połączenie tworzymy tylko jedno, nie inicjujemy go w każdej klasie.
EDIT: Nie będę żałował.
Inicjujemy na samym początku np. index.php
Ten post edytował Pax95 31.01.2009, 13:59:28 -------------------- Nie zapomnij o
![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Chciałbym dorzucić mój problem do tego tematu. Napisałem klasę, która w konstruktorze tworzy połączenie z bazą danych oraz zawiera metody insertQuery, selectQuery itd, które przygotowują zapytanie do bazy, wykonywane prywatną metodą doQuery. Wszystko chodziło pięknie, ale był problem, kiedy przyszło zagnieździć zapytanie do bazy w zapytaniu. Już tłumaczę: Załóżmy, że mamy dwie tabele.
Tworzę sobie egzemplarz obiektu do obsługi bazy
Wyszukuję newsy w bazie:
Tyle, że nie po to pisałem klasę, żeby używać mysql_query(). To jedna sprawa, druga jest taka, że jeśli zamiast mysql_query() użyję znów $sql->selectQuery to zmieni mi to zapytanie używane do przewijania wyników w linijce while($news=$sql->fetchResults(). Muszę więc tworzyć dodatkowy obiekt (a to jest drugie połączenie z bazą danych - coś, czego trzeba unikać). Sprawę rozwiązałem tak, że wydzieliłem kod połączenia z bazą danych do klasy mySqlConnect, a zapytania do klasy mySqlQueries. Tworzę jedno połączenie z bazą, a potem odpowiednio do potrzeb tworzę obiekty odpowiadające za przygotowanie zapytań do bazy:
Tak to działa u mnie... tylko, że coś mi mówi, że to nie jest dobre podejście... Czy ktoś podejmie się oceny takiego rozwiązania i ewnetualnie wskaże mi bardziej właściwą drogę? Pozdrawiam Tarcil PS. Przepraszam, jeżeli wciąłem się w złym temacie. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Twój problem jest bardzo 'klasyczny'. Masz tak:
a jeśli masz zagnieżdzenia powinieneś mieć tak:
A co do wyższych postów to na dalszym etapie prac przekonacie się że singletony to bagno w które lepiej się nie pakować. Było wiele wątków na ten temat. Zainteresujcie się rozwiązaniem za pomocą kontekstu; Tarcil kombinujesz bez singletona ale coś masz nie tak; Zrób sobie plik Bootstrap.php a w nim:
Ten post edytował Black-Berry 2.02.2009, 10:46:50 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki
![]() Jak znajdę trochę czasu na przepisanie kodu to na pewno skorzystam ![]() Black-BerryChciałem Ci dać "Pomógł" ale nie widzę nigdzie odpowiedniego przycisku... Pozdrawiam Ten post edytował Tarcil 2.02.2009, 12:08:22 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Black-BerryChciałem Ci dać "Pomógł" ale nie widzę nigdzie odpowiedniego przycisku... I nie znajdziesz jeżeli nie jesteś autorem Wątku. -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 09:20 |