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





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


... chyba chodzi o to, że po wywołaniu wyjątku typu MessageException() ma się gdzieś zapisać informacja o błędzie, i program ma wrócić do dalszego wywoływania kodu. Natomiast w przypadku wywołania FatalException() ma przerwać działanie aplikacji.

Niestety nie da się (albo nie znam sposobu) zrobić to w taki prosty sposób, Ponieważ wyrzucenie wyjątku to wyrzucenie wyjątku, więc program i tak pójdzie do obsługi... a stamtąd raczej nie ma prostego powrotu. Chyba lepszym wyjściem będzie po prostu użycie jakiegoś innego rodzaju klasy do notowania MessageException(). Coś na styl:

  1. <?php
  2. class MessageException{
  3. function __construct($msg){
  4. $this->writeToLogFile($msg);
  5. $this->notifyUser($msg);
  6. }
  7. //... itd
  8. }
  9. ?>


Po prostu ją wywołujesz a potem skrypt działa dalej.
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: 8.10.2025 - 22:12