![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 31.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem, widocznie nie wystarczająco rozumiem zasięgu zmiennych oraz obiektów
Mam sobie plik z łączeniem z bazą danych config.php
No i tutaj wszystko działa, problem rodzi się gdy chce coś dodać bo bazy, ładuje plik z klasą odpowiedzialną za łączenie z bazą danych require_once ('config.php'); zarówno w pliku index.php jak i pliku który przechowuje pozostałe klasy nowaclass.php. Zacząłem pisać klasę odpowiedzialną za tworzenie użytkownika,
Coś takiego nie przynosi rezultatu i oddaje błąd, że funkcją exec próbuje odwołać się do czegoś co nie jest obiektem "Fatal error: Call to a member function exec() on a non-object" Ale gdy tą metodę zrobię w ten sposób
Wszystko działa ok, stąd moje pytanie, jak zrobić iż globalnie tworzę obiekt $pdo = Database::getDB(); i nie muszę łączyć się z bazą danych za każdym razem w metodzie gdy chcę tego użyć ? Opcjonalnie nie tylko w danej klasie ale także dla innych klas. Ten post edytował hunter1988 2.06.2013, 11:00:58 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Szczerze mówiąc oba sposoby przy takiej składni nie powinny działać, czy czasem nie zrobiłeś gdzieś błędu przy wklejaniu kodu?
Albo definiujesz zmienną $pdo i wtedy używasz jej w zakresie jej widoczności, czyli tak jak prawdopodobnie wygląda drugi działający sposób:
albo też definiujesz jako property dla klasy i wtedy używasz tak:
Poza tym w obu przypadkach wykorzystujesz istniejące już połączenie z bazą. Gwarantuje to klasa Database zrobiona jako singleton, getDB() zwraca tą samą instancję klasy PDO za każdym razem lub ewentualnie tworzy ją jeśli jej jeszcze nie ma. Ten post edytował pmir13 2.06.2013, 12:25:19 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 31.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Czyli jeżeli mam połączenie które już istnieje to za każdym razem jak piszę nową klasę i chce działać na bazie danych muszę w konstruktorze $this->pdo = Database::getDB(); (chodzi mi o to żeby w jednym miejscu ustawić połączenie które będzie wszędzie, a potem odwoływać się tylko do obiektu pdo)
To jest chyba odwoływanie się do połączenia które już istnieje ? Jeżeli dobrze mi się wydaje to jak powinno się działać na bazie danych, tworzyć nowe metody itp ? Ten post edytował hunter1988 2.06.2013, 12:40:13 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:13 |