Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%)
|
Mam pytanie, zaczynam dopiero z OOP. Stworzyłem klasę służącą do połączenia z bazą danych.
Klasa:
W innej klasie mam:
W pliku głównym:
Niestety otrzymuję błąd z informacą, że $db nie jest obiektem i nie mogę wywołać na jego rzecz metody exec() |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%)
|
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%)
|
Ok dzięki, mam jednak pytanie czy dało by się obejść bez dziedziczenia po klasie Db? Chciałem przekazać w parametrze obiekt klasy Db. Jest to tylko nauka OOP i myślę, że przy rozbudowie skryptu lepszym rozwiązaniem byłoby właśnie przekazanie obiektu Db niż ciągłe dziedziczenie.
|
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%)
|
Zmienna typu private jest dostępna tylko wewnątrz klasy, tak więc musisz dopisać funkcję która ją zwróci: __get().
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%)
|
Zailustruję jak ja myślę, chcąc przekazać obiekt Db jako parametr w innej klasie. Lecz to nie działa.
W pliku głównym tworzę egzemplarz obiektu Db oraz egzemplarz artykulu:
W klasie Article mam:
Czyli według mojego rozumowania w konstruktorze klasy Article przekazuję new Db które przypisane jest do właściwości $db. Czyli $db powinno być egzemplarzem klasy Db bez jej dziedziczenia. Niestety PHP wywala, że $db nie jest obiektem. |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%)
|
Bo klasa nie jest obiektem przecież, tylko klasą. (IMG:style_emoticons/default/smile.gif)
Dopisz do klasy Db:
I tutaj argument funkcji jest zbędny, ponieważ operujesz na obiekcie, a nie na zmiennej, swoją drogą nigdzie nie przypisujesz wartości. Więc albo dodaj do konstruktora $this->id = costam, albo zmień w zapytaniu na $id.
Ten post edytował b4rt3kk 4.10.2012, 01:15:14 |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%)
|
@UP klasa to obiekt pełną gębą (IMG:style_emoticons/default/wink.gif)
@pitu Wiesz w jakim celu używasz klasy Db a nie bezpośrednio PDO? Bo jeżeli ma ona służyć TYLKO połączeniu z bazą to taki kod jest całkowicie bez sensu i może być zastąpiony zwykłą funkcją...
Zobacz sobie do Zenda jak tam zaprojektowano obsługę bazy danych i wyciągnij wnioski Ten post edytował CuteOne 6.10.2012, 23:50:09 |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 15 Dołączył: 12.08.2012 Skąd: Zabrze Ostrzeżenie: (10%)
|
@UP klasa to obiekt pełną gębą (IMG:style_emoticons/default/wink.gif) Klasa nie jest obiektem, obiekt to instancja klasy. Gdyby klasa była obiektem, każda klasa implementowałaby przymusowego Singletona. |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 380 Pomógł: 59 Dołączył: 24.04.2010 Skąd: London Ostrzeżenie: (0%)
|
|
|
|
|
Post
#10
|
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
W klasie Article mam:
Czyli według mojego rozumowania w konstruktorze klasy Article przekazuję new Db które przypisane jest do właściwości $db. Czyli $db powinno być egzemplarzem klasy Db bez jej dziedziczenia. Niestety PHP wywala, że $db nie jest obiektem. Nie __constructor tylko __construct. Po tej zmianie powinno śmigać. |
|
|
|
![]() ![]() |
|
Aktualny czas: 8.08.2026 - 20:26 |