Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sterownik bazy danych + sesje
Forum PHP.pl > Forum > PHP > Object-oriented programming
PrzemoN
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
chmolu
  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.
PrzemoN
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?
dr_bonzo
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
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.