![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 18.02.2017 Ostrzeżenie: (0%) ![]() ![]() |
Cześć wszystkim,
Zaczynam zabawę z obiektowym PHP i nadziałem się na pierwszy problem, z którym nie mogę sobie poradzić (google też nie pomogło ani przeszukanie forum). Otóż na mojej stronie mam załadowaną główną klasę, która łączy się z bazą danych:
Następnie tworzony jest obiekt
a zaraz po nim mam zaincludowaną drugą klasę, która ma za zadanie wyciągnięcie informacji z bazy danych:
Niestety w linii gdzie przygotowywane jest zapytanie (linia nr 7) dostaję błędy: Notice: Undefined property: EducationTiles::$Retail Notice: Trying to get property of non-object Fatal error: Call to a member function prepare() on null Będę wdzięczny za podpowiedź jak to poprawnie wykonać by śmigało ![]() |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
Nie zachowujesz w klasach zasady chermetyzacji danych(i pewnie innych z resztą tez ale się nie przyglądalem). Poczytaj o pradygmatach programowania obiektowego oraz o setterach i getterach. To tak z podstawowych pojęć.
![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
$this->retail odnosi się do nulla bo nigdzie nie ma definicji ani wskazania czym to ma być. Poza tym za dużo tego wszystkiego. Jak już to coś w stylu:
Ale powinieneś dążyć do minimalizmu. Zobacz sobie przykłady aplikacji zendowych https://github.com/zendframework/zf3-web, https://github.com/zf3buch/zendframework-ce...e/chapter_18_01 np jak wygląda fabryka kontrolera https://github.com/zf3buch/zendframework-ce...llerFactory.php Do kontrolera wstrzykiwane są tylko minimalne zależności. -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 18.02.2017 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za rady, poczytałem trochę o hermetyzacji, getterach, setterach i ogólnie o wzorcu projektowym jakim jest fabryka. Starałem się wyciągnąć patrząc na kod aplikacji zendowskich, ale niestety na tą chwilę dla mnie to czarna magia
![]() Jeżeli dobrze zrozumiałem to powinno się dążyć do tego, żeby atrybuty w klasach nie były publiczne, a jedynie żeby istniała możliwość ich ustawiania czy pobierania poprzez wspomniane gettery i settery. Natomiast co do samego kontrolera, powinien on sterować tym co ma się zadziać, a nie tak jak w moim przypadku nawiązywać już połączenie z bazą danych. Jeżeli moje rozumowanie jest błędne będę wdzięczny za naprowadzenie. Idąc tym tropem zmodyfikowałem moje klasy tak, że wyglądają one następująco: 1. Sam kontroler tworzy niezbędne klasy, a połączenie z bazą danych zostało przeniesione do nowej klasy. Dodana została metoda do pobierania połączenia z bazą.
2. Wspomniana klasa "Database" wygląda na tą chwilę następująco:
3. Wszystko zostało poprzedzone autoloaderem:
Przyznam się, że trochę się w tym jeszcze gubię i dalej nie wiem w jaki sposób wykorzystać w innej klasie wspomniane połączenie z bazą danych. Oczywiście siedzę dalej nad lekturą w postaci internetu, ale wszelki wskazówki będą mile widziane ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 17:02 |