Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Exception w dwoch postaciach:)
kicaj
post
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Zastanawiam sie jak rozwiazac problem z wyjatkami, otoz:
Tworze sobie pochodne klasy Exception:
MessageException (mniej powazne bledy)
FatalException (powazny blad zatrzymujacy dzialanie aplikacji)

MessageException chcialbym uzywac np. do problemow typu: Niepoprawne ID, Nie ma takiego rekordu w bazie, etc., a FatalException do sytuacji gdy np. nie ustanowiono poleczenia z db

  1. <?php
  2. class DB
  3. {
  4.  // laczy z baza, w razie niepowodzenia zwraca:
  5.  throw new FatalException( 'Niestety nie ustanowiono polaczenia z baza!' );
  6. }
  7.  
  8. class Users
  9. {
  10. function __construct( $iID )
  11. {
  12. if( !is_numeric( $iID ) )
  13. {
  14.  throw new MessageException( 'Niepoprawne ID' );
  15. }
  16. }
  17. ?>



  1. <?php
  2. $oDB = new DB; //laczenie
  3.  
  4. try
  5. {
  6. // wyswietlanie podstawowego widoku (header)
  7.  
  8. $oU = new Users( 'a' );
  9.  
  10. // wyswietlanie podstawowego widoku (footer)
  11. }
  12. catch( Exception $oE )
  13. {
  14. echo $oE -> printError();
  15. }
  16. ?>


Efektem tego ma byc ze jezeli nie polaczy sie z baza dostanie na ekranie tylko komunikat o bledzie (FatalException), zas jesli wystapi blad w klasie Users (MessageException) to wsywietlony zostanie szablon z komunikatem o bledzie (header, komunikat, footer)

Jak to rozwiazac?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Whisller
post
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

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


I może ja się wypowiem kilka słów na temat wyjątków.
Ograniczenie klas wyjątków do właśnie dwóch klas Fatal i Notice ( czy jak je tam nazwiesz ), nie jest zbyt dobrym rozwiązaniem.
Z tego względu że doprowadza do sytuacji w której nie wiesz tak na prawdę na jakim etapie coś padło.
Nie jesteś w stanie dla odpowiedniego błędu przygotować akcji zastępczej, no chyba że zrobisz duuuży switch z numerami błędów, nie wspominając o tym aby pamiętać który numer co robi.
A dolicz sobie do tego zle wyłapywanie wyjątków w zagnieżdzonym try...catch (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Popatrz:
  1. <?php
  2. class Klasa
  3. {
  4. public function add()
  5. {
  6.  try {
  7. ...
  8. $this->db->insert(); // Tutaj takze moze wywalic wyjatek FatalErrorException
  9. ...
  10.  // Jakies operacje ktore wywala wyjatek FatalErrorException
  11. throw new FatalErrorException("Uhh nie udalo sie");
  12.  ...
  13. } catch ( FatalErrorException $e ) {
  14.  // Który throw złapaliśmy?
  15. }
  16. }
  17. }
  18.  
  19. try {
  20. $o->add();
  21. } catch( FatalErrorException $e ) {
  22.  // Czy to nam się wywoła? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
  23. }
  24. ?>


Ten post edytował Whisller 5.12.2007, 13:59:33
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: 9.10.2025 - 03:10