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





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Kolejny przykład
  1. $config = Zend_Config('sciezka/do/pliku/xxx.ini');


Zend_Config oczekuje, że podasz prawidłową ścieżkę do pliku konfiguracyjnego inaczej sypnie wyjątkiem. Programista oczywiście o ty wie(zazwyczaj (IMG:style_emoticons/default/haha.gif) ) i nie wstawi tam ścieżki do nie istniejącego pliku ale... co jeżeli walnie literówkę i np. zamiast /configs/config.ini wpisze /config/config.ini? Będzie ślęczał w kodze godzinami w poszukiwaniu błędu..

W jednej ze swoich aplikacji używam około 10 wywołań Zend_Config w najróżniejszych miejscach i jakoś nie widzi mi się przeczesywać setki tysięcy linii kodu aby znaleźć literówkę gdy mogę odczytać nazwę pliku, linię i cały backtrack prosto z monitora. Pamiętaj programista to tylko człowiek i popełnia błędy

Mam nadzieję, że powyższy przykład rozjaśnił ci co nieco (IMG:style_emoticons/default/smile.gif)


co do Twojego pytania... wyjątki mają służyć programistom nie użytkownikom a to co podałeś to nadal walidacja - do tego są osobne mechanizmy

Ten post edytował CuteOne 21.08.2012, 19:58:53
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 - 12:53