Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Baza Danych, połączenia, wykonywanie akcji
Forum PHP.pl > Forum > PHP > Object-oriented programming
eai
Witam,
od pewnego czasu nurtuje mnie pewna kwestia zwiazana z bazami danych.

Otóż załóżmy że mam klasę obsługującą bazę MySQL a w innych klasach z niej korzystam.
W kazdej klasie nie jest przekazywany indentyfikator połączenia, w kazdej klasie tworzone jest nowe polączenie do bazy danych. Istotną sprawa przy tworzeniu aplikacji php jest szybkosć jej wykonywania, w takim przypadku kilka krotne nawiązywania połączenia z bazą danych mija się z celem.

Nasunął mi się pomysł żeby za każdym razem nie tworzyc nowego polączenia $db = new MySQL; tylko je przekazywać, i tu pojawia sie problem w jaki sposób przekazywać połączenie?

Czy lepiej w innych klasach przekazywać zmienną z obiektem MySQL w funkcji construct($mysql = null) czy może przekazywać identyfikatorem połączenia w zmiennej $GLOBALS?

Głównie chodzi o to żeby zapobiec tworzeniu nowych połączeń przy jednym wywołaniu strony, i jak najlepiej to zrobić?

Macie pomysly? W jaki sposób wy to rozwiązujecie.
Zapraszam do dyskusji dry.gif
Kowalikus
Jeśli korzystasz tylko z jednej bazy danych to: Singleton zapewni Ci, że będziesz miał tylko i wyłącznie jedną instancję tej klasy. Ewentualnie stwórz rejestr (Registry).
eai
I to mi zapewni że przy każdym wywołaniu klasy new Klasa(); nie będzie tworzyła sie nowa tylko przekazywała obiekt?
czy wywołuje obiekt::GetInstace(); ?
Kowalikus
Wywołujesz obiekt::GetInstace() bo jak Singleton zakłada konstruktor jest prywatny wtedy new Klasa(); zgłosi error
LBO
To już nie lepiej identyfikator połączenia trzymać w zmiennej statycznej?
menic
Statycznie bedzie o wiele wygodniej. Ew. Mozesz utworzyc osobną klase która łaczy sie z bazą i utrzymuje (zwraca) połączenie.
virusek856
możesz skorzystać również z mysql_pconnect. z wywołaniem mysql_pclose na końcu aplikacji
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.