Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sterownik bazy danych + sesje
PrzemoN
post 25.10.2005, 18:58:18
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 25.10.2005

Ostrzeżenie: (0%)
-----


Witam serdecznie wszystkich,

Moj problemik wyglada nastepujaco

Mam dwie klasy sql oraz session
Jak nietrudno sie domyslic pierwsza do obslugi SQL (dokladnie PgSQL) a druga do obsługi sesji.
I teraz pytanko klasa session dziedziczy z klasy sql (klas sql jest matka).

Destruktor klasy sql konczy poloczenie z baza danych
  1. <?php
  2.  
  3. public function __destruct() {
  4. if(is_resource($this -> link))
  5. {
  6. pg_close($this -> link);
  7. }
  8. }
  9.  
  10. ?>


Destruktor klasy session ma uaktualnic istniejaca sesje jesli zostana spelnione odpowiednie warunki.
  1. <?php
  2.  
  3. public function __destruct() {
  4. if($this->action == UPDATE) {
  5. globa $db;
  6. $sql = 'UPDATE sessions SET id = ''.$this->session_id.'', time='.time().' WHERE id=''.$this->session_id.
  7. ''';
  8. $db->query($sql); // metoda query jest z klasy sql ( obsluguje zapytania SQL-owe)
  9. }
  10. }
  11.  
  12. ?>


Problem jest w tym ze destroktor w klasie sql zamyka mi to poloczenie jako pierwszy. I wówczas destruktor w klasie sesii nie jest wstanie wykonac metody query(wchodzacej w sklad sql).
Poniewaz poloczenie z baz zostalo przerwane (zrobil to destruktor w klasie sql).

Pytanie: Jak zrobic zeby naiperw wykonal sie destruktor klasy sesion (dziedziczaca) a pozniej destruktor klasy sql (i czy tak wogle da sie zrobic).

PS: W chwili obecnej udalo mi si to obejsc w ten sposób ale szukam innego rozwiazania
  1. <?php
  2.  
  3. public function __destruct() {
  4. if($this->action == UPDATE) {
  5. $new = new sql(); // TUTAJ JESZCZE RAZ LACZE SIE Z BAZA
  6.  // tworzae nowe poloczenie z baza danych i tym sposobem to dziala
  7.  $sql = 'UPDATE sessions SET id = ''.$this->session_id.'', time='.time().' WHERE id=''.$this->session_id.
  8. ''';
  9. $new->query($sql); // metoda query jest z klasy sql ( obsluguje zapytania SQL-owe)
  10.  
  11. }
  12. }
  13.  
  14. ?>


Za wszelkie sugestie dzieki z gory smile.gif.


//edited by DeyV - Używj tagu php
Go to the top of the page
+Quote Post
chmolu
post 25.10.2005, 19:33:01
Post #2





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 8.10.2004

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. public function __destruct() {
  4.  //instrukcje klasy session
  5.  
  6.  parent::__destruct();
  7. }
  8.  
  9. ?>


A tak w ogóle to po co klasa Session ma dziedziczyć z klasy SQL? Wprowadzasz tylko bałagan i głupie błędy.
Go to the top of the page
+Quote Post
PrzemoN
post 26.10.2005, 10:28:59
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 25.10.2005

Ostrzeżenie: (0%)
-----


Cytat(chmolu @ 2005-10-25 18:33:01)
  1. <?php
  2.  
  3. public function __destruct() {
  4.  //instrukcje klasy session
  5.  
  6.  parent::__destruct();
  7. }
  8.  
  9. ?>


A tak w ogóle to po co klasa Session ma dziedziczyć z klasy SQL? Wprowadzasz tylko bałagan i głupie błędy.

Dzieki za tak szybka odpowiedz jednak aproponowane przez ciebie rozwiazanie niestety nie dziala.

Klasa sql w moim przypadku obsluguje wszystkie metody zwiazane z obsluga bazy danych.
A kolejne klasy ktore dokonuja jakichs operacji na danych w bazie korzystaja z tej klasy.
Dzieki temu wewnatrz klasy session nie musze pisac czegos w tym stylu
NP:
Kod
$result = pg_query($conn, "SELECT author, email FROM authors");

Tylko pisze
Kod
$db->query("SELECT author, email FROM authors");


Dodatkowo jesli che uruchomic mechanizm transakcji to wklepuje tylko kod w stylu
Kod
$db->query("jakies zapytanie",BEGIN_TRANSACTION);
//zrobilem cos na wzor z phpBB2


a caly mechanizm uruchamiajacy i zamykajacy proces transakcji umieszczeny jest w metodzie query w klasie sql.

Czy to jest nielogiczne?

Byc moze sie myle jezeli tak to wytlumacz mi czemu?
Go to the top of the page
+Quote Post
dr_bonzo
post 26.10.2005, 12:04:25
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Sesja nie musi byc zapisywana w bazie danych (np. w plikach) wiec nie powinna dzidziczyc po SQL (bo zajmuje sie czym innym niz obsluga polaczen z baza danych), tylko wykorzystywac obiekty tej klasy.

Cytat
Jak zrobic zeby naiperw wykonal sie destruktor klasy sesion (dziedziczaca) a pozniej destruktor klasy sql (i czy tak wogle da sie zrobic).

Nie polegaj na kolejnosci wywolywania destruktorow, lepiej recznie wszystko wylaczaj/zapisuj sesje/rozlaczaj z baza.

http://forum.php.pl/index.php?showtopic=22168
http://forum.php.pl/index.php?showtopic=27628


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 13:27