![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Posiadam klasę Database:
oraz klasę user która ma w sobie:
Najpierw na stronie tworzę element klasy Database żeby połączyło z bazą, a potem używam metody z klasy user. Jednak na stronie zwraca taki błąd: Fatal error: Call to a member function prepare() on a non-object Co zrobiłem nie tak? Czyżby nie widziało połączenia z innej klasy? A może każdą klasę mam dziedziczyć po Database? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 291 Pomógł: 45 Dołączył: 21.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
chyba raczej
Trochę jednak nielogiczne zamykać PDO w klasie, która będzie jedynie pomostem i przechowywaczem konfiguracji. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dalej ten sam błąd. Skoro mówisz żeby nie zamykać pdo w klasie to jak inaczej zrobić? Przecież nie będę w każdym pliku dołączał tych samych linijek łączących z bazą
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
Zrób klasę do obsługi MySQL i ją dziedzicz, lub po prostu przekazuj obiekt PDO jako argument do __construct() a później z niej twórz obiekt private w danej klasie.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 59 Dołączył: 16.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
Cytat("wazniak96") Zrób klasę do obsługi MySQL i ją dziedzicz, lub po prostu przekazuj obiekt PDO jako argument do __construct() a później z niej twórz obiekt private w danej klasie. W tym wypadku ani dziedziczenie ani przekazywanie obiektu bazy do klasy nic nie da ![]()
a tak pozatym to do pół w klasie odwołujesz się przez $this-> czyli nie:
tylko
pozdrawiam Ten post edytował sajegib 28.04.2013, 13:25:57 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
A czy zrobienie połączenia bez zamknięcia w klasie i dołączanie wszędzie to dobre rozwiązanie?
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 59 Dołączył: 16.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
obiekt bazy przekazuj do konstruktora klasy korzystającej z DB, tak jak napisał kolega, jednak najpierw zrób działającą klasę bazy
![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
Chyba źle się wyraziłem, w każdym razie mniej więcej o to samo mi chodziło.
![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
sajegib, dzięki za pomoc. Mam jeszcze pytanko: Czy klasy powinny być od siebie zależne? Tzn jak mam w klasie User wylogowywanie to normalnie niszczyć tam sesje, czy może korzystać z metody zawartej w klasie SessionManager i czy ją dziedziczyć?
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 324 Pomógł: 110 Dołączył: 18.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak dla mnie najlepszym rozwiązaniem będzie użycie Singletonu
![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 59 Dołączył: 16.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
sajegib, dzięki za pomoc. Mam jeszcze pytanko: Czy klasy powinny być od siebie zależne? Tzn jak mam w klasie User wylogowywanie to normalnie niszczyć tam sesje, czy może korzystać z metody zawartej w klasie SessionManager i czy ją dziedziczyć? Moim zdaniem stworzyć nową klasę do obsługi sesji, tworzyć w klasie User obiekt klasy session i wywoływać jej metody. np.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc. Mam jeszcze jeden problem z klasą User:
Gdy używam potem na stronie czegoś takiego:
To wyskakuje: Fatal error: Using $this when not in object context i pokazuje na linię w kórej jest return w metodzie getName Jak to naprawić? |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 59 Dołączył: 16.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
Nie możesz użyć :: (dwa dwukropki), bo ten operator dotyczy metod/pól statycznych
zamień na -> |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, nigdy bym na to nie wpadł
![]() |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
@koxu1996 nie męcz się w wynajdowanie własnych "pseudorozwiązań" bo gdy wynajdziesz nowy problem, znowu zmarnujesz czas na zastanawianie się jak go rozwiązać. Zainteresuj się frameworkami - zend, codeigniter, symfony (na początek polecam CodeIgniter). Budując swoją aplikację na frameworku masz pewność, że prawie każdy problem, został rozwiązany a tobie pozostaje tylko jego odpowiednia implementacja:)
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
@CuteOne Próbowałem pracować z frameworkiem, ale postanowiłem że najpierw nauczę się programować obiektowo. Nie szukam jakichś pseudo rozwiązań, tylko zastanawiam się jak z sensem użyć oop na stronie aukcyjnej. Na razie pisanie obiektowe dało mi rozdzielenie modelu od widoku oraz przejrzystość kodu, ale poza tym nie widzę wyższości tego nad zrobieniem tego samego na funkcjach. I tak wszystkie klasy mają po jednym obiekcie, a jedynie w aukcjach będzie tworzone wiele obiektów które i tak będą nadpisywane do jednej zmiennej. Chodzi mi tylko o pomoc w wybraniu klas które mam stworzyć (framework tego nie rozwiązuje). Teoretycznie mógłbym zrobić klasę Category i każdą kategorie zrobić jako obiekt, ale po co jak wystarczy tylko jedna pętla po pobraniu z bazy.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
Budujesz powiedzmy klasę aukcja zajmującą się daną jej aukcją. Z właściwości aukcji robisz obiekty, następnie poprzez metody dowolnie edytujesz sb je i możesz jednocześnie pracować na zmodyfikowanych już obiektach bez wysyłania żadnego zapytania np. UPDATE do MySQL. Po zakończeniu działań wykonujesz metodę z zapytaniem UPDATE, które nadpisuje dane aukcji z obiektów. I tym oto sposobem masz jedno zapytanie zamiast kilkudziesięciu. Oczywiście, że da się to zrobić na funkcjach ale gdzie zapiszesz dane? Aby ponownie użyć zbioru tych funkcji musisz mocno ingerować w cały skrypt. Tutaj dołączasz klasę i już praktycznie mało co do roboty.
![]() |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 3 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
@Wazniak96 Sory ale cie nie rozumiem. Czy mógłbyś mi wytłumaczyć to zdanie: "Z właściwości aukcji robisz obiekty" - Właściwości aukcji to pola w klasie, więc jak z nich zrobię obiekty? Następnych zdań to w ogóle nie rozumiem. Jak pracuje na obiektach bez zapytań, jak każda zmiana musi być wysyłana do bazy i na bieżąco pokazywana użytkownikom.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
kurde.. znowu pomieszałem nazewnictwo za co wielkie sorry. Chodziło mi o pola właśnie. Chodziło mi o klasę do obróbki przez usera/admina aukcji. Podczas modyfikowania trzymasz wszystko w polach klasy, a później zapisujesz je dopiero do bazy. Brak zbędnych zapytań. Do tego nie zapominajmy o cachowaniu danych. Kolejny raz można zapisać dane w polach klasy a następnie zserializować class i zapisać do pliku.
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 22:42 |