![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 0 Dołączył: 7.05.2004 Skąd: Jelenia Góra Ostrzeżenie: (0%) ![]() ![]() |
Witam,
postaram się jak najlepieej opisać problem. Aplikacja opiera się o programowanie obiektowe. Mam napisany sterownik bazy danych m.in. zawierający obliczanie ilości wykonanych zapytań do bazy. Oprócz tej klasy istnieje klasa obsługująca użytkownika - zalogowanego, bądź nie. Problem wydaje się banalny, ale nie dla mnie. Chciałbym aby sterownik obsługujący np. obliczanie ilości zapytań potrzebnych do wyświetlenia newsów na stronie (taki przykład) był również wykorzystywany w tej samej formie (ten sam identyfikator) do obliczania ilości zapytań podczas obsługi użytkownika, aby ilość zapytań była dodawana. Tj. na początku skryptu znajduje się kod: $sql = new Mysql( [parametry] ); Aby użyć klasy bazy danych w klasie np. User musiałem tworzyć nowy identyfikator, albo zastąpić już istniejący. Aby temu zapobiec wykorzystywałem do tego konstrukcję global, ale już wiem, że to nie jest poprawne. Jest na to jakieś rozwiązanie? Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 0 Dołączył: 7.05.2004 Skąd: Jelenia Góra Ostrzeżenie: (0%) ![]() ![]() |
Ok. Przedstawię co udało mi się wykombinować. Niby działa, ale...
Konstruktor sterownika bazy zajmuje się połączeniem i prywatny. Singleton (martwi mnie to przekazywanie parametrów tutaj). [$oInstance jest private static]
I teraz wygląda to tak, że w wywołaniu klasy (tu gdzie teraz byłoby wywołanie do konstruktora gdyby nie singleton, są przekazywane parametry - dlatego są opcjonalne) - czyli: $sql = Mysql::getInstance( [parametry] ); A w reszcie kodu: $sql = Mysql::getInstance(); Jednak wiem, że przekazywanie parametrów do singletona mija się z jego ideą. Powinienem więc zamiast konstruktora napisać funkcję do łączenia z bazą i wywoływać objekt klasy na kształt:
Albo na odwrót ? Wyczytałem to gdzieś i nie zabardzo wiem jak to działa w tym przypadku. Prosiłbym o dogłębsze wytłumaczenie sprawy, może komuś się przyda, a ja chciałbym wiedzieć co i jak jest zalecane żeby pisać poprawnie. Pozdrawiam. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 0 Dołączył: 27.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jednak wiem, że przekazywanie parametrów do singletona mija się z jego ideą. Powinienem więc zamiast konstruktora napisać funkcję do łączenia z bazą i wywoływać objekt klasy na kształt:
Albo na odwrót ? Wyczytałem to gdzieś i nie zabardzo wiem jak to działa w tym przypadku. Prosiłbym o dogłębsze wytłumaczenie sprawy, może komuś się przyda, a ja chciałbym wiedzieć co i jak jest zalecane żeby pisać poprawnie. nie widzę problemu w przekazywaniu zmiennych do getInstance(). Np. na początku skryptu robisz
a później już tylko getInstance bez parametrów. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 22:34 |