Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyjatki - problem
Rafiki
post
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 29.12.2005
Skąd: Z krzaków

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


Witam.

Stworzylem plik extends w ktorym mam:

  1. <?php
  2. class system_Exception extends Exception {
  3. }
  4. ?>


nic wielkiego ...

Procz tego mam klase do obslugi mysqla, z cacheowaniem i inne 'gadzety'. W klasie tej w niektorych miejscach generowane sa wyjatki min w konstruktorze ktory ma za zadanie wywolanie polaczenia z baza, gdy polaczenie sie nie powiedzie generowany jest wyjatek w taki sposob:

  1. <?php
  2. throw new system_Exception('Błąd w nawiązaniu połączenia z bazą danych - ' . mysqli_connect_error($this -> connect) . ' - ' . mysqli_connect_errno($this -> connect));
  3. ?>


Niby wszystko ok... teraz mam index.php

  1. <?php
  2. include_once('config.php');
  3. include_once('libs/exceptions.class.php');
  4. include_once('libs/sql.class.php');
  5.  
  6. try
  7. {
  8. $sql = & new sql('localhostaaa', 'user', 'password', 'dbname');
  9. } catch (Exception $Ex) {
  10. include($site['dir'] . 'templates/' . $site['template'] . '/Exception.php');
  11. } catch (system_Exception $sys_Ex) {
  12. include($site['dir'] . 'templates/' . $site['template'] . '/system_Exception.php');
  13. }
  14. ?>


Dane przy wywolaniu klasy sa specjalnie zle podane aby zostal wychwycony wyjatek... ale wyjatek przechwyca catch z Exception a nie z system_Exception mimo ze w klasie do obslugi sql wywolywalem system_Exceptions.

System Exceptions ma sie roznic tym od zwyklego wyjatku ze ma wywalac bledy w 'jadrze' systemu na surowo na bialym tle z dokladnym opisem, linia bledu itd itd... zas zwykly wyjatek ma wyswietlac sam opis ktory ma sie wyswietlac w jakiejs okreslonej szacie graficznej strony, ale niestety nie dziala gdyz system_Exceptions pokazuje sie tak jak powinien sie pokazywac zwykly Exceptions ( bynajmiej tak mi sie wydaje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Prosze o pomoc i z gory dziekuje.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





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

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


Manual: php przeglada kolejno wszystkie catch'e i po napotkaniu pierwszego z typem wyjatku bedacym klasa/nad-klasa aktualnie obslugiwanego wyjatku wchodzi do tego catch'a{}.

Cysiaczek:
juz lepiej to usun, bo wyglada jak bys nie przejmowal sie wystepujacymi wyjatkami. W tym przypadku wystarczy jeden catch z Exception
  1. <?php
  2. catch(specExc $e){}
  3. catch(specExc2 $e){}
  4. catch(specExc3 $e){}
  5. ?>


----------
edit: mike_mech

Cytat
W takiej sytuacji kiedy chcemy na każdy wyjątek zareagować tak samo, to możesz dpisać troche kodu do klsy po której wszystkie dziedziczą.

Reakcja na wyjatek jest jego obsluga w catch'u a nie wewnatrz obiektu wyjatku :/
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(dr_bonzo @ 15.08.2006, 16:08 ) *
----------
edit: mike_mech
Reakcja na wyjatek jest jego obsluga w catch'u a nie wewnatrz obiektu wyjatku :/

Tak wiem, ale można zrobić:
  1. <?php
  2. try
  3. {
  4. }
  5. catch( MyException $objException ) // MyException extends Exception a cała reszta extends MyException
  6. {
  7. $objException->logError();
  8. }
  9.  
  10. ?>


Hmm, ale takie teoretyzowanie już nie za daleko prowadzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 3.10.2025 - 07:54