Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.10.2010 Ostrzeżenie: (0%)
|
Poniewaz dopiero od niedawna mam stycznosc z objektowym projektowaniem w php, mam jedno pytanie ktore przysparza mie sporo trudnosci. Dotyczy ono polaczenia z baza danych i pozniejszego jego wykorzystywania. Zalozmy ze mamy kilka klas korzystajacych z bazy danych. Czy w waszych aplikacjach na poczatku pliku tworzycie polaczenie ( za pomoca funkcji mysql connect ) i dolaczacie ten plik do kazdej strony, a w waszych klasach zakladacie ze polaczenie zostalo juz wczesniej otwarte i uzywacie komend mysql query a na koncu strony zalozmy w pliku footer.php zamykacie polaczenie? Czy moze tworzycie klase mysql z komendami query itd. I kazda klasa korzysta z jej instancji i metod.
Chcac dac przyklad zeby to lepiej zobrazowac zalozmy ze mam klase User i metode setName. Czy w metodzie setName uzywacie bezposrednio komendy mysql update liczac ze polaczenie zostalo otwarte wczesniej (nie w tej klasie, a dolaczone w pliku do kazdej strony) czy moze w tej metodzie tworzycie instancje klasy MYSQL (stworzonej przeze mnie i np laczycie sie z baza w konstruktorze) i korzystacie z jej metod zeby wykonac operacje na bazie danych. Mam nadzieje ze nie zagmatwalem tego za bardzo. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 130 Pomógł: 11 Dołączył: 7.04.2003 Ostrzeżenie: (10%)
|
Jakąkolwiek warstwę abstrakcji wybierzesz (PDO jest bardziej nowoczesne) ważne jest aby dostęp do niej następował przez obiektowy interfejs, oraz aby nie inicjalizować połączenia cześciej niż to konieczne, a także nie tworzyć nadmiarowych instancji obiektu obsługującego połączenie.
Najprostsze rozwiązanie (nie znaczy najlepsze): Opakowujesz obiekt z połączeniem do bazy w singleton, (tylko jedna instancja) tak że siedzi on sobie jako zmienna w nowo utworzonej klasie. W konstruktorze lub w którejś metod wywoływanych w konstruktorze ustawiasz połączenie którego używasz później. W ten sposób możesz go wyciągnąć w dowolnym miejscu w swoim systemie. Oczywiście twój obiekt nie powinien powielać całego interfejsu PDO. Służy jedynie inicjalizacji połączenia, wszystkie metody są wywoływane na właściwym obiekcie z ustawionym połączeniem. Tą samą funkcjonalność można osiągnąć bez singletonu, ale jest to już trudniejsze do osiągnięcia, ponieważ wymaga przekazywania obiektu jako zmiennej do miejsc w których będzie wykorzystywany. |
|
|
|
collecter baza danych koncepcja obiektowa 20.04.2011, 21:17:38
Crozin 1. Od połączenia z bazą danych w PHP masz PDO, a n... 20.04.2011, 21:25:23 
pyro Cytat(Crozin @ 20.04.2011, 22:25:23 )... 20.04.2011, 22:39:59
Crozin CytatNigdy nie widziałem wiarygodnego wpisu, który... 20.04.2011, 23:06:08
Inscure Trzeba zacząć od tego, że funkcje mysql_ nie są ju... 29.04.2011, 22:22:59
Zyx Witaj Inscure, na Twoją prośbę przesłaną przez PW ... 1.05.2011, 13:49:00
Inscure Zastanawiałem się nad dwoma typami rozwiązań probl... 1.05.2011, 17:27:04
pejott Ja bym zdecydowanie zrezygnował z metod statycznyc... 1.05.2011, 17:55:40 ![]() ![]() |
|
Aktualny czas: 30.12.2025 - 08:59 |