Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyjątki - przewidywanie błedu, Po co rzucać błędem jeśli go przewidzieliśmy?
mimol
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

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


Czytałem coś o wyjątkach, wiem jak się ich używa, jednak nie mam pojęcia PO CO??
Patrząc na przykład z PHPEdia
  1. <?php
  2. class Foo {
  3. // $bar powinno być liczbą całkowita
  4. public function __construct($bar) {
  5. if (!is_int($bar)) {
  6. throw new InvalidArgumentException('Argument powinien być liczbę całkowitą!');
  7. }
  8.  
  9. echo 'Konstruktor wywołany z prawidłowym argumentem!';
  10. }
  11. }
  12.  
  13. try {
  14. $str = 'aaa';
  15. $foo = new Foo($str); // wywołujemy konstruktor klasy Foo z argumentem który jest stringiem
  16.  
  17. echo 'Obiekt klasy Foo został utworzony';
  18. } catch (Exception $e) {
  19. echo $e;
  20. }?>

Jaki sens ma łapanie tutaj wyjątku ?!
Czy nie lepiej jest
  1. if (!is_int($bar)) {echo '<p onclick="java script:histroy_back()">Argumen powinien być liczbą, Popraw dane</p>'}

Wyjątki wg mnie da się wrzucić TYLKO tam gdzie MOŻE POWSTAĆ błąd! Wieć czy nie lepiej jest pisać aplikacje tak BY NIE BYŁO błędów (przynajmniej tych o których wiemy że mogą być). Zgodnie z 'Lepiej zapobiegać niż leczyć'.
Proszę o jakieś wytłumaczenie po co ich używać.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Co w przypadku gdybyś chciał zareagować na wystąpienie błędu inaczej niż zwykłym wywaleniem komunikatu i przerwaniem działania skryptu?
2. Zwykły komunikat błędu zawiera bardzo, bardzo mało informacji. Wyjątek może przenosić dowolnie złożoną strukturę danych, wyjątek może przechowywać zawierać w sobie przyczynę swojego wystąpienia (inny wyjątek), wyjątek posiada backtrace'a.
3. Wyjątki są mniej podatne na błędy i muszą być obsłużone na jakimś poziomie, inaczej przerwą działanie całego skryptu - zauważ, że w Twoim trywialnym przykładzie już popełniłeś błąd: wyświetlasz komunikat, ale pozwalasz na dalsze wykonywanie się kodu.

Cytat
Wyjątki wg mnie da się wrzucić TYLKO tam gdzie MOŻE POWSTAĆ błąd! Wieć czy nie lepiej jest pisać aplikacje tak BY NIE BYŁO błędów (przynajmniej tych o których wiemy że mogą być). Zgodnie z 'Lepiej zapobiegać niż leczyć'.
Jeżeli otrzymujesz informację o błędzie (nie koniecznie w postaci wyjątku) to znaczy, że ktoś przewidział ten błąd, ponieważ wiedział że może tam powstać błąd. Nie da się też napisać kodu pozbawionego obsługi błędów, który operuje na danych niezależnych od siebie. Nigdy nie wiesz czy dane otrzymane z zewnątrz są poprawne.

Ten post edytował Crozin 21.08.2012, 12:06:13
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: 27.12.2025 - 06:59