Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 30.05.2007 Skąd: Wędzina Ostrzeżenie: (0%)
|
Witam.
Mam dziwny problem z destruktorami i nie za bardzo wiem jak go rozwiązać. Przeglądałem trochę forum i manuala, ale nic w podobnym stylu nie było. Oto opis mojego problemu: mam prosty systemik, w którym mam m. in. klasy DB (obsługa bazy danych, śle zapytania i przechowuje informacje o ewentualnych błędach) oraz Session (jak sama nazwa mówi - do obsługi sesji). W klasie Session w destruktorze wywołuję metodę, która kończy mi daną sesję, czyli przy pomocy klasy DB robi UPDATE danych w bazie. Działa, jednak...no właśnie. Gdybym w klasie DB miał destruktor, w którym kończyłbym połączenie z bazą danych, to to zapytanie już wygeneruje błąd, czyli tak jakbym był rozłączony. Dodam jeszcze, że później pobieram sobie pewną metodą informacje o zapytaniach (klasa DB) i brakuje tego ostatniego zapytania kończącego sesję (teraz oczywiście rozważam wersję bez zakończonego połączenia). Aha, jeszcze dodam (może to mieć jakiś związek - tak przypuszczam), że obiekty pobieram przy pomocy czegoś w stylu rejestru, tzw. ClassLoader'a. Załączę odnośniki do kodów klas. Na logikę i angielski proszę na razie nie zwracać uwagi - poprawki wprowadzam na bieżąco (IMG:style_emoticons/default/winksmiley.jpg) session.class.php db.class.php classloader.class.php |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%)
|
Przez lata programiści nauczyli się nie ufać destruktorom w PHP. Sprawiały mnóstwo problemów (wystarczy poczytać komentarze w odpowiednim rozdziale manuala). Istnieje obejście tego problemu, dosyć szeroko stosowane w wielu frameworkach - swój własny wirtualny system zarządzania obiektami.
A wykorzystujesz to mniej więcej tak.
Wszystko pisane z palca, więc jakby co poprawiać lub pytać (IMG:style_emoticons/default/smile.gif) Pozdrawiam Też racja. Ale nawet nie o to mi chodziło. Chciałbym uzyskać odpowiedź na temat tego destruktora, dlaczego to nie działa. W sumie jakoś pracy szczególnie nie utrudnia, ale bywa w małym stopniu irytujące, gdyż (moim zdaniem) powinno wszystko działać. O ile sam nie usuwasz obiektów robi to samo PHP przy zakończeniu skryptu - a wtedy nie możesz być 100%-owo pewny kolejności. Rozwiązanie powyżej. Ten post edytował LBO 16.08.2009, 18:44:58 |
|
|
|
kazaa9 Destruktor wykonuje się za wcześnie. 16.08.2009, 15:59:06
-=Peter=- Jaki jest sens zamykania połączenia z bazą danych ... 16.08.2009, 17:39:47 
sowiq Cytat(-=Peter=- @ 16.08.2009, 18... 16.08.2009, 18:35:38 
-=Peter=- Cytat(sowiq @ 16.08.2009, 17:35:38 ) ... 16.08.2009, 22:38:25
kazaa9 Też racja.
Ale nawet nie o to mi chodziło. Chciał... 16.08.2009, 17:58:01
kazaa9 CytatO ile sam nie usuwasz obiektów robi to samo P... 16.08.2009, 18:42:42
LBO dodałem kilk małych zmian w kodzie.
Cytat(kazaa9 ... 16.08.2009, 18:45:52
erix CytatMylisz się. Połączenie jest zamykane w chwili... 17.08.2009, 11:00:29
sowiq @-=Peter=-, @erix,
oczywiście macie rację. Straszn... 17.08.2009, 19:12:50
erix Cytatusuń proszę mojego poprzedniego posta, albo p... 17.08.2009, 19:23:45 ![]() ![]() |
|
Aktualny czas: 11.06.2026 - 02:26 |