![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 29.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
chciałbym wykorzystać wzorzec Singletona do połączenia się z bazą danych (MySQL) i do tego dołożyłem sobie PEAR' a, ale coś mi nie idzie. To co mam to są takie pliki: classa.Databases.php
Wiem, że brakuje obsługi błędów. test.php
I teraz tak. Po pierwsze czy dobrze myślę o wzorze Singletona (dobrze jest napisana klasa)? Po drugie czemu mi wywala błąd(Fatal error: Call to undefined function: MDB2_Driver_mysqli::numCol(). in pear/MDB2.php on line 1950)? To wygląda na błąd PEAR, ale jak robię normalnie bez mojej klasy to jest dobrze. Po trzecie, widziałem gdzieś jak koleś właśnie tworzył takie metody jak u mnie (fetchAll), ale czy przed tym nie powinno występować query()? Nie wiem co tu jeszcze może być źle |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
PEAR MDB2 ma już wbudowany singleton http://pear.php.net/manual/en/package.data...tro-connect.php więc twoja klasa jest trochę bez sensu.
Twój singleton napisany jest w sumie dobrze. Nie zabezpiecza jedynie przed:
Dodaj do swojej klasy pustą funkcję: private function __clone() {} No i źle używasz fetchAll(). W tej bibliotece MDB2_Driver_Common::query() zwraca obiekt klasy MDB2_Result_Common, na którym dopiero można wykonać fetchAll(). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 29.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 2 Dołączył: 8.10.2010 Skąd: Poniemieckie miasto przesiedleńców Ostrzeżenie: (0%) ![]() ![]() |
to zależy, co potrzebujesz zrobić, opisane są 3 funkcje i każda z nich zwraca instancję, factory() nie nawiązuje połączenia, connect() nawiązuje gdy już masz np. zainicjowany ten obiekt, a singleton w tym wypadku robi to tak jak Ty chcesz to wykorzystać
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 29.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
To może inaczej. Czytałem właśnie artykuł o abstrakcyjnej klasie obsługującej bazę, m.in. wzorzec singletona. Mi głównie chodzi o to, aby nie łączyć się z bazą za każdym razem.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 2 Dołączył: 8.10.2010 Skąd: Poniemieckie miasto przesiedleńców Ostrzeżenie: (0%) ![]() ![]() |
no to factory() nie łączy się z bazą, ale zwraca instancję obiektu
Will instantiate a new MDB2_Driver_Common instance, but will not connect to the database until required. This will delay making the actual connection. This is called lazy connecting. Using this makes sense if it is possible that due to caching inside the application no connection will ever need to be established. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 10:45 |