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
splatch
post
Post #2





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Używanie wyjątków do informowania o tym, że coś poszło nie tak jest jak najbardziej na miejscu, jakkolwiek ograniczanie się tylko do 2 typów już nie jest trafne. Skorzystaj z pełni możliwości jakie oferują Ci wyjątki do tego by komunikować różne sytuacje. Generalizacja na dwa stopnie - wyjątek groźny i niegroźny jest złe, ponieważ po drodze jest cała gama problemów z którymi radzisz sobie w różny sposób a typ złapanego wyjątku od razu ułatwia Ci diagnozę (stacktrace + typ). Rozróżnienie fatal/warning/notice to w gruncie rzeczy poziom programowania strukturalnego i trigger_error. Zrób coś więcej..

  1. <?php
  2. class BaseSystemException extends Exception {}
  3.  
  4. class DatabaseException extends BaseSystemException {}
  5. class ConnectionException extends DatabaseException {}
  6. class QueryException extends DatabaseException {}
  7.  
  8. class IOException extends BaseSystemException {}
  9.  
  10. // z takim kodem możesz zrobić np:
  11. try {
  12. new DatabaseManager($url);
  13. } catch (ConnectionException $e) {
  14. // problem z połączeniem
  15. } catch (QueryException $e) {
  16. // np problem z SET NAMES po połączeniu
  17. } catch (DatabaseException $e) {
  18. // nieznany błąd związany z bazą danych
  19. } catch (IOException $e) {
  20. // błąd odczytu np konfiguracji
  21. } catch (BaseSystemException $e) {
  22. // błąd zgłoszony w Twoim kodzie
  23. } catch (Exception $e) {
  24. // błąd, którym sypnęło np PDO
  25. }
  26.  
  27. ?>
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: 12.10.2025 - 22:41