![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 1 Dołączył: 16.12.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam problem... Przeszukałem google pod podobnymi hasłami jak w temacie, lecz nie znalazłem odpowiedniego, działającego rozwiązania. A musi jakieś istnieć - chyba, że to co chcę zrobić, jest nieodpowiednie, lub istnieje owiele prostrzy spodób... Mianowicie, mam dwie klasy: SQL i UserData. Pierwsza z nich służy do obsługi bazy danych. Druga będzie miała za zadanie zbierać z tej bazy różnego rodzaju informacje i odpowiednio je łączyć. Klasę SQL wywołuję w taki sposób:
Baza łączy się w konstruktorze. Próbowałem dołączać klasę w argumencie, lecz to nic nie dało. W klasie Data pragnę odwoływać się do klasy SQL, ponieważ będę tam przeprowadzać wszelkie operacje oparte o dane użytkownika.
Jak zrobić coś tego typu? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
W każdym bądź razie to nie najlepsze rozwiązanie. Ten post edytował Turson 30.03.2014, 14:54:17 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 803 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A może do zainicjowanego obiektu klasy UserData przekazać obiekt klasy SQL?
-------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 479 Pomógł: 97 Dołączył: 6.09.2011 Skąd: php.net :) Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że dla Ciebie będzie odpowiednie hasło Singelton i metoda getInstance()
Dodasz w klasie SQL metodę, a następnie w innych klasach skorzystasz z SQL :
-------------------- Manual prawdę Ci powie.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 332 Pomógł: 22 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Turson dlaczego
Cytat W każdym bądź razie to nie najlepsze rozwiązanie też jestem ciekawy
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 1 Dołączył: 16.12.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak połącze się w klasie z bazą, to strona nie chce mi się wyświetlić... Tzn. gdy mam złe parametry połączenia, to naturalnie wyświetla mi się komunikat o znaczącej treści, że dane są nieprawidłowe, lecz gdy sa prawidłowe, strona się nie wyświetla. Zna ktoś jakieś inne rozwiązanie?
Ostatecznie mogę potraktować to jako zwyky zbiór funkcji... Ewentualnie zamieścił te funkcje w klasie SQL. Ten post edytował Mephis 30.03.2014, 15:03:40 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 321 Pomógł: 55 Dołączył: 19.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
też jestem ciekawy bo każda klasa powinna być odpowiedzialna na "jedną rzecz" (?). Co klasę UserData obchodzi połączenie do DB. -------------------- Polecam MyDevil hosting idealny dla deweloperów
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Ciebie nie interesuje wykorzystanie klasy w klasie, tylko obiektu w obiekcie.
2. Było już dosłownie dziesiątki razy na forum... zawsze kończyło się tym, że najlepszym rozwiązaniem, nie stwarzającym żadnych problemów i dającym jakieś korzyści z OOP jest IoC np. w realizacji przez dependency injection. Ten post edytował Crozin 31.03.2014, 09:50:30 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 1 Dołączył: 16.12.2012 Ostrzeżenie: (0%) ![]() ![]() |
Hmm... Jak dla mnie to zbyt skomplikowane, może kiedyś z tego skorzystam. Cóż, skoro nie ma prostego rozwiązania, będę musiął uczynić tak jak napisałem wcześniej. Istnieje jeszcze możliwość przekazania w argumencie zaptania SQL.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) ![]() ![]() |
Tutaj nie ma nic trudnego. Po prostu w swojej klasie Userdata zajmujesz się tylko tym, co ma ta klasa robić i zamiast tworzyć:
tworzysz w klasie SQL metodę dodatkowo musisz utworzyć zmienną i teraz w swojej klasie Userdata możesz się odwołać tak: I bez tworzenia obiektu klasy Sql możesz odwoływać się do jej metod. Ten post edytował in5ane 31.03.2014, 10:09:01 -------------------- > > > Tworzenie stron < < <
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jak masz już tworzyć takie glamoty, to lepiej już w ogóle nie używaj klas i obiektów, bo zrobisz podwójnie źle. Oprzyj się w takim wypadku na funkcjach (powrót do PHP4).
To samo się tyczy @in5ane oraz @IProSoft Ten post edytował pyro 31.03.2014, 11:24:05 -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 479 Pomógł: 97 Dołączył: 6.09.2011 Skąd: php.net :) Ostrzeżenie: (0%) ![]() ![]() |
@pyro - z tego co piszesz woskuję, że lepiej nie uczyć się wcale, niż uczyć na błędach ?
Dostał najwygodniejsze rozwiązania z jego punktu widzenia ( nie koniecznie najlepsze ), skoro uważasz, że są złe, podaj lepsze. -------------------- Manual prawdę Ci powie.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) ![]() ![]() |
A co jest złego w użytkowaniu singletona do połączenia z bazą danych jeśli na samym początku tworzenia aplikacji programista będzie wiedział, że połączenie będzie potrzebował zawsze jedno? Jak już zaczynasz coś pisać, to może rozwiń swoją myśl.
-------------------- > > > Tworzenie stron < < <
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jakbyś pomagał uczyć się na błędach to byłoby OK, zamiast tego jedynie pchasz użytkownika w dalsze błędy.
Lepsze rozwiązania zostały już podane i nie widzę sensu pisać tego samego. A może do zainicjowanego obiektu klasy UserData przekazać obiekt klasy SQL? bo każda klasa powinna być odpowiedzialna na "jedną rzecz" (?). Co klasę UserData obchodzi połączenie do DB. 1. Ciebie nie interesuje wykorzystanie klasy w klasie, tylko obiektu w obiekcie. 2. Było już dosłownie dziesiątki razy na forum... zawsze kończyło się tym, że najlepszym rozwiązaniem, nie stwarzającym żadnych problemów i dającym jakieś korzyści z OOP jest IoC np. w realizacji przez dependency injection. -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 18:13 |