Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyjątki
Forum PHP.pl > Forum > PHP
smiady
Witam.

Mam pytanie. Jeśli tworzę nowy obiekt, który korzysta z wielu obiektów np Exception, PDOException, CostamException - to muszę to zagnieżdzać wielokrotnie w taki sposób ?
  1. try {
  2. try {
  3. $klasa= new Klasa();
  4. } catch(PDOException $e) {
  5. echo $e->getMessage();
  6. }
  7. } catch(Exception $e) {
  8. echo $e->getMessage();
  9. }


I jeszcze co oznaczają argumenty do wprowadzenia, gdy się wpisuje
  1. throw new Exception($message, $code, $previous);

$message - to wiem komunikat, który wyłowuje się poprzez metodę getMessage(),
$code - domyślam się, że podaje się typ błedu (kod) ?
$previous - ?
Crozin
1. Możesz zagnieżdżać bloki try..catch, bądź ustawić wiele bloków catch dla jednego try, jednakże działanie obu będzie różne.
2. O ile wiadomość ($message) jest przeznaczona dla ludzi o tyle typ (klasa) i właśnie ewentualnie kod wyjątku pozwalają na łatwą identyfikacje błędu od strony programistycznej.
3. Jeżeli jakiś wyjątek zostaje wyrzucony w skutek pojawienia się innego wyjątku powinieneś wrzucić ten pierwotny właśnie jako $previous.
sazian
1)możesz mieć kilka bloków catch ale pamiętaj że są dopasowywane kolejno więc catch(Exception ... musi być ostatni
2)previous to poprzedni wyjątek, jest to po to żeby mieć pełną "historie" błędów.
prosty przykład

  1.  
  2. class myException1 extends Exception{}
  3. class myException2 extends Exception{}
  4. class myException3 extends Exception{}
  5.  
  6. try
  7. {
  8.  
  9. throw new myException3();
  10. }
  11. catch(myException1 $e)
  12. {
  13. var_dump('e1',$e);
  14. }
  15. catch(myException1 $e)
  16. {
  17. var_dump('e2',$e);
  18. }
  19. catch(Exception $e)
  20. {
  21. var_dump('e',$e);
  22. }
  23.  
  24.  

i inny przykład
  1.  
  2. class myException1 extends Exception{}
  3. class myException2 extends Exception{}
  4. class myException3 extends Exception{}
  5. class myException4 extends Exception{}
  6. function a()
  7. {
  8. throw new myException3('E3');
  9. }
  10.  
  11. function b()
  12. {
  13. try
  14. {
  15. a();
  16. }
  17. catch(Exception $e)
  18. {
  19. throw new myException4('E4',0,$e);
  20. }
  21. }
  22.  
  23. try
  24. {
  25. b();
  26.  
  27. }
  28. catch(myException1 $e)
  29. {
  30. var_dump('e1',$e);
  31. }
  32. catch(myException1 $e)
  33. {
  34. var_dump('e2',$e);
  35. }
  36. catch(Exception $e)
  37. {
  38. var_dump('e',$e);
  39. }
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.