Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamykanie połączeń MySql
Forum PHP.pl > Forum > PHP
Lewiatan
Witam,

Mam pytanko natury technicznej.

Załóżmy, że mam skrypt, dajmy na to user_list.php, który w pętli dodaje do tablicy kolejne obiekty, powiedzmy klasy User. Niech by to w uproszczeniu wyglądało tak:

  1. <?php
  2.  
  3. $user_list = array();
  4.  
  5. for ($i = 0; $i < $user_counter; $i++)
  6. {
  7. $user_list[] = new User($i);
  8. }
  9.  
  10. ?>


Załóżmy, że $user_counter jest obliczone wcześniej.

Pytanie brzmi tak: jeśli klasa User otwiera w konstruktorze połączenie z bazą celem pobrania informacji o użytkowniku, ale go NIE zamyka, to zgodnie z zasadą, że koniec skryptu i wszystkie połączenia są zamykane, to połączenia zostaną zamknięte po zakończeniu skryptu user_list.php?

Czy dobrze rozumuję, że jeśli klasa User nie zamyka połączenia to jeśli pętla będzie miała 30 obiegów to przed zakończeniem skryptu będę miał otwartych 30 równoległych połączeń?
mat-bi
Pamiętaj, że w jednym skrypcie jest tylko jedna klasa, chyba, że użyjesz clone
Lewiatan
Cytat(mat-bi @ 4.05.2011, 15:41:33 ) *
Pamiętaj, że w jednym skrypcie jest tylko jedna klasa, chyba, że użyjesz clone

No ok, ale mam $user_counter obiektów. Chodzi o to, czy jeśli konstruktor skończy pobierać dane i połączenie nie zostanie zamknięte to w takim razie zostanie ono zamknięte dopiero po wykonaniu całego skryptu?
mat-bi
Samo się nie zamyka, lepiej dać zamykanie w destruktorze
Crozin
@mat-bi: Co mają niby klasy do clone?

Co do tematu - zależy od tego czym i jak łączysz się z bazą danych. Generalnie jeżeli za każdym razem używasz tych samych parametrów połączenia za każdym razem zostanie użyte pierwsze połączenie. Nie zmienia to jednak faktu, że:
1. Co to za durny pomysł, żeby nawiązywać połączenie w takim miejscu.
2. Co to za durny pomysł, żeby obiekt reprezentujący użytkownika (wnioskuję po nazwie) pobierał jakieś dane z bazy?
mat-bi
Wydaje mi sie, że zawsze jest jedna instancja klasy, dopiero poprzez clone tworzymy wiele.

np.

  1. <?php
  2.  
  3. class osoba{
  4. public $imie;
  5. public $nazwisko;
  6. public $ksywa;
  7.  
  8. }
  9.  
  10. $ja = new osoba;
  11. $ja -> imie = 'Tomasz';
  12. $ja -> nazwisko = 'Jędrzejewski';
  13. $ja -> ksywa = 'Zyx';
  14.  
  15. echo 'JA: '.$ja -> imie.' '.$ja -> nazwisko.' aka. '.$ja -> ksywa.'<br/>';
  16.  
  17. $on = $ja; // 1
  18. echo 'Tworzymy $on...<br/>';
  19.  
  20. $on -> imie = 'Bartosz';
  21. $on -> nazwisko = 'Maciaszek';
  22. $on -> ksywa = 'Sickboy';
  23.  
  24. echo 'ON: '.$on -> imie.' '.$on -> nazwisko.' aka. '.$on -> ksywa.'<br/>';
  25. echo 'JA: '.$ja -> imie.' '.$ja -> nazwisko.' aka. '.$ja -> ksywa.'<br/>';
  26. ?>


(przykład z http://museum.webcity.pl/webcity/artykuly.php/t/59)

@EDIT:
Cytat
Object Cloning
Crozin
A zauważyłeś, że Ty nie utworzyłeś nowego obiektu (new ...) tylko utworzyłeś referencję ($on) do już istniejącego ($ja)? Poczytaj o podstawach programowania czyli o zmiennych i referencjach.
Lewiatan
Cytat(Crozin @ 4.05.2011, 16:00:21 ) *
1. Co to za durny pomysł, żeby nawiązywać połączenie w takim miejscu.
2. Co to za durny pomysł, żeby obiekt reprezentujący użytkownika (wnioskuję po nazwie) pobierał jakieś dane z bazy?

Dlaczego od razu durny? biggrin.gif
mat-bi
Sorry, pomieszałem kod, nie dojrzałem.
Crozin
Bo w obu przypadkach łamiesz jedną z podstawowych zasad OOP jaką jest pojedyncza odpowiedzialność obiektów. A złamanie jej - poza aspektem ideologicznym - niesie za sobą cały szereg problemów, które wynikną jak tylko skończysz projekt i będziesz chciał go rozwijać w przyszłości.
Lewiatan
Cytat(Crozin @ 4.05.2011, 18:02:19 ) *
Bo w obu przypadkach łamiesz jedną z podstawowych zasad OOP jaką jest pojedyncza odpowiedzialność obiektów. A złamanie jej - poza aspektem ideologicznym - niesie za sobą cały szereg problemów, które wynikną jak tylko skończysz projekt i będziesz chciał go rozwijać w przyszłości.

Hmm... o tym przyznam szczerze nie miałem pojęcia... albo gdzieś mi umknęło między wierszami. Dzięki za informację, będę musiał nadrobić te braki wink.gif

Jeśli o mnie chodzi: EOT, także z powodzeniem można zamknąć
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.