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





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

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?
Sądze, że obojętnie czy 'sepcjalny komunikat' mogę również napisać zarówno z jak i bez wyjątków
2.Mógłbyś podać jakiś przykład
3. Jak napisać wyjątek, który nie przerwie działania skryptu, myślałem, że zawsze po wykonaniu instrukcji throw program kończy działanie?

Czy podsumowując wyjątki stosować tylko do skomplikowanych rzeczy (tam gdzie potrzebujemy jakiejś informacji jak błąd powstał(IMG:style_emoticons/default/questionmark.gif) ) Bo nie widze sensu stosowania wyjątków w przykładnie powyżej

Cytat
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.

Czyli wyjątki stosować tylko tam gdzie dane pochodzą od użytkownika?

Ten post edytował mimol 21.08.2012, 12:25:48
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 - 09:00