Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak duży blok try catch
hugo_amv
post
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 22.06.2005
Skąd: Lublin

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


Na pewnej mądrej stronie ( nie pamiętam jakiej, może na java.sun.com, ale na pewno źródło było dość pewne) spotkałem się z opinią, że nie powino się umieszczać duży bloków kodu pomiędzy try catch, a jedynie krótkie fragmetny kodu i odrazu przechwytywać błędy. Ja wolę wszystkie wyjątki przechwytywać w silniku strony, a dopiero potem zajmować się ich obsługą.

  1. <?php
  2. try{
  3. /**
  4.  * Tutaj różne moduły, uruchamiaja różne klasy,
  5.  * które zwracają różne wyjątki :)
  6.  */
  7. }catch (SQLException $e){
  8. // Obługa wyjątków związanych z bazą danych
  9. echo $e;
  10. }catch (FileException $e){
  11. // Inny typ wyjątków
  12. echo $e;
  13. }catch (Exception $e){
  14. // Pozostałe rodzaje błędów
  15. }
  16. ?>


Jednak na tamtej stronie było wyraźnie napisane, że jest to złą praktyką programistyczną. Jak to w końcu jest?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Powszechnie używa się jednego typu wyjątków w całej bibliotece, co nie znaczy, że ten wyjątek w każdej sytuacji znaczy to samo. Przyglądnij się na przykład PDO, które zawsze wyrzuca PDOException. Jeżeli w jednym bloku try będziesz przechwytywał wyjątki z konstruktora i wywołań kilku zapytań, to po prostu zgubisz się i nie będziesz wiedział co się stało. Poza tym pisanie w długim bloku try i wyłapywanie n wyjątków jest po prostu nieeleganckie i mało wydajne. Co do czytelności... nie sądzę, żeby było czytelne oczekiwanie na wyjątek, w miejscu, w którym nie wystąpi. Chyba, że u ciebie w większości instrukcji w bloku try mogą zostać wyrzucone wyjątki. Jest jeszcze jedna sytuacja, w której można przywrócić poprawne działanie skryptu poprzez wykonanie konkretnych instrukcji po przechwyceniu wyjątku. W tym przypadku rozdzielenie kodu na kilka bloków jest konieczne.
Go to the top of the page
+Quote Post
hugo_amv
post
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 22.06.2005
Skąd: Lublin

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


Cytat(Ludvik @ 3.06.2006, 17:08 ) *
Powszechnie używa się jednego typu wyjątków w całej bibliotece, co nie znaczy, że ten wyjątek w każdej sytuacji znaczy to samo. Przyglądnij się na przykład PDO, które zawsze wyrzuca PDOException. Jeżeli w jednym bloku try będziesz przechwytywał wyjątki z konstruktora i wywołań kilku zapytań, to po prostu zgubisz się i nie będziesz wiedział co się stało.

Wyjątek wyrzuca treść błedu oraz kod błędu. Wieć nierozumiem po co piszesz, że wyrzucone wyjątki nie zawsze znaczą to samo? Przecież to oczywiste. Jak będe wiedział co się stało? Będe miał kod błędu i treść.
Cytat(Ludvik @ 3.06.2006, 17:08 ) *
Poza tym pisanie w długim bloku try i wyłapywanie n wyjątków jest po prostu nieeleganckie i mało wydajne.

Ale dlaczego jest nieelegackie? Dlaczego mało wydajne? Argument o małej wydajności zbiłem na samym początku. Musisz czymś poprzeć swoje tezy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) a nie pisać, że coś jest brzydkie bo jest brzydkie...
Cytat(Ludvik @ 3.06.2006, 17:08 ) *
Co do czytelności... nie sądzę, żeby było czytelne oczekiwanie na wyjątek, w miejscu, w którym nie wystąpi.
Chyba, że u ciebie w większości instrukcji w bloku try mogą zostać wyrzucone wyjątki.

Ale skoro łapie wyjątki z całego kodu aplikacji to na pewno gdzieś te wyjątki są generowane.
Cytat(Ludvik @ 3.06.2006, 17:08 ) *
Jest jeszcze jedna sytuacja, w której można przywrócić poprawne działanie skryptu poprzez wykonanie konkretnych instrukcji po przechwyceniu wyjątku. W tym przypadku rozdzielenie kodu na kilka bloków jest konieczne.

Jaka to sytuacja, podaj przykład?

Ten post edytował hugo_amv 3.06.2006, 18:56:16
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: 13.10.2025 - 08:46