![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 67 Pomógł: 0 Dołączył: 9.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym wykorzystać Singleton w moim systemie newsowym. Wziąłem tą implementacje z phpedia.pl, ale mam problem. Jak użyć Singleton żeby można było go wykorzystywać w moich klasach?
Czy trzeba dołączyć plik z klasą Singleton do mojej klasy przez include() czy co, tylko jak później tego użyć np. z łączeniem się przez PDO? Jak w ogóle go użyć do łączenia się z bazą danych przy kilku klasach? Implementacja z phpedia.pl
Przykładowa klasa
Ten post edytował Matado 29.04.2009, 13:42:53 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 41 Dołączył: 6.04.2009 Skąd: Gdańsk/okolice Ostrzeżenie: (0%) ![]() ![]() |
żeby używać Singletona trzeba go zrozumieć od początku do końca, nie ma sensu używać go na siłę "bo mówią że to fajne".
klasę dołączasz jak każdą inną klasę, tu ważne jest jej zachowanie. co dokładnie chcesz osiągnąć z tymi bazami? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 67 Pomógł: 0 Dołączył: 9.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mam np. parę klas i nie chcę łączyć się co chwilę przy każdej klasie z bazą. Dlatego chciałbym użyć Singleton, żeby nie było potrzeby łączenia się z bazą w każdej klasie.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Użycie jest banalnie proste. Zamiast robić
robisz Resztę masz zaimplementowaną w przykładzie, który podałeś. Dla celów edykacyjnych możesz dopisać w konstruktorze klasy Singleton i zobaczyć ile razy wydrukuje się ten tekst jeśli kilkukrotnie wywołasz Singleton::getInstance() Ten post edytował sowiq 29.04.2009, 14:10:34 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 7 Dołączył: 19.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
To jeszcze jedno pytanie z mojej strony, który zapis jest lepszy / prawidłowy / bezpieczniejszy?
czy może przekazywać obiekt bazy przy wywołaniu metody
-------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Korzystanie z singletona w klasie obsługującej bazę danych to imo jedna z najgłupszych rzeczy. A co jak będziesz chciał używać dwóch połączeń do dwóch różnych baz? Lepiej jest przekazać obiekt poprzez parametr w konstruktorze innego obiektu:
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Korzystanie z singletona w klasie obsługującej bazę danych to imo jedna z najgłupszych rzeczy. A co jak będziesz chciał używać dwóch połączeń do dwóch różnych baz? Dopisujesz metode ktora przelacza na druga baza i w razie potrzeby można wrócić do pierwszej. Ale tak naprawde wyjatkowo rzadko trzeba się łączyć z innymi bazami. Wiec singleton do bazy danych jest idealny. Lepiej jest przekazać obiekt poprzez parametr w konstruktorze innego obiektu: Wiec bawi cię przekazywanie referencji do obiektu do każdej klasy? Sorry, ale wlasnie dlatego wybieram singletona zeby nie mieć takich krzaczków. A jak nagle mi sie zachce w pewnej klasie uzywac bazy danych to nie czeka mnie bezsensowne dopisywanie argumentów do konstruktora. Zapewne może jeszcze paść argument o global ale jak wszyscy wiemy, global to zło. Ten post edytował wookieb 18.05.2009, 21:26:44 -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Jeszcze zostaje rejestr, kupa innych wzorców...
Nie ma sensu rozpoczynać kolejnego flamewaru, był już co najmniej jeden. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 7 Dołączył: 19.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
przypomnę że pytałem o to jak używać Singletona a nie czy
![]() -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@wookieb: mi nie chodziło o baze danych w obrębie bazy danych
Tylko o zupełnie inny serwer bazy danych - wymagający osobnego połączenia. @taktu: Nie... Ty pytałeś w tym poście: http://forum.php.pl/index.php?s=&showt...st&p=609331 o to czy uzyskać dostęp do obiektu poprzez singleton czy przekazując go jako parametr. ![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat Korzystanie z singletona w klasie obsługującej bazę danych to imo jedna z najgłupszych rzeczy. A co jak będziesz chciał używać dwóch połączeń do dwóch różnych baz? Wtedy stosujesz PROPERTY lub Registry i cieszysz sie 2 bazami. -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Yyy.. wzorzec singleton gwarantuje mi to, że zostanie utworzona tylko jedna instancja danej klasy (to że będzie dostepna globalnie to inna bajka), tak więc na nic mi się to zda.
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 21:55 |