Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php5] Exception i bloki try/catch, i jak wykorzystać throw (jak obsłużyć błędy których nie przewidzimy)
jastu
post 27.11.2006, 14:24:36
Post #1





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

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


Sama obsługa błędów jest dla mnie (jeśli dobrze rozumiem) jasna , problem polega na wykorzystaniu tej obsługi .

Są pliki z klasami - pliki php - pliki php wykorzystują klasy i wysyłają dane do szablonów ....

Generuję wyjątek w klasie np.DBusing bo nie można się połączyć.... ale w pliku php w kolejnej lini wysyłam zapytanie i dostaję kolejny wyjątek...hm...

Można dać to w blok try ale wtedy mam jeszcze większy bałagan z wyjątkami (jeśli powstała by tablica wyjątków to pierwszy pociągnął by za sobą kolejne a nie tak to być powinno ).

Jak pisać obługę błędów ?

Ten post edytował jastu 27.11.2006, 20:03:31


--------------------
Powyższy post wyraża jedynie opinię autora w dniu dzisiejszym. Nie może on służyć przeciwko niemu w dniu jutrzejszym. Ponadto autor zastrzega sobie prawo zmiany poglądów, bez podawania przyczyny.
Go to the top of the page
+Quote Post
dr_bonzo
post 27.11.2006, 14:40:09
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  1. <?php
  2. try
  3. {
  4.  // laczysz sie z baza
  5. $db = new DBusing()
  6. $eb_>connect();
  7.  // zapytania
  8. $db->query(...)
  9. }
  10. catch ()
  11. {
  12.  ... obsluga
  13. }
  14. ?>


nie polaczy ci sie z baza -> wyjatek -> dalsze zapytania do bazy nie beda wykonywane


Przenosze z php na PHP5


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
jastu
post 27.11.2006, 15:12:45
Post #3





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

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


tzn że w klasie nie budujemy wyjątków ? ewentualnie możemy robić IF`y sprawdzając ? ? ?

btw . jeśli mamy konstrukcję
  1. <?php
  2. try{
  3.  // polecenie 1
  4. try{
  5. // polecenie 2
  6. // polecenie 3
  7. }
  8. catch(Exc pol2){}
  9. catch(Exc pol3){}
  10. catch(Exc){}
  11. // polecenie 4
  12. }
  13. catch(Exc pol1){}
  14. catch(Exc pol4){}
  15. catch(Exc){}
  16. ?>


Jeśli dobrze rozumiem bład w 2 bloku try wygeneruje wyjątek ale plecenie 4 się wykona - co zrobić jeśli polecenie 4 korzysta z wyników operacji w poleceniu 2 i 3 , dać do jednego bloku 2 ,3 i 4 ?


//edit
polecenie numer 4 wygeneruje wyjątek ... a co z wyjątkami w klasach ? nie korzystamy ?

btw. co zrobić by w każdym pliku nie korzystac z funkcji set_error(exception)_handler() ?

Ten post edytował jastu 27.11.2006, 15:33:39


--------------------
Powyższy post wyraża jedynie opinię autora w dniu dzisiejszym. Nie może on służyć przeciwko niemu w dniu jutrzejszym. Ponadto autor zastrzega sobie prawo zmiany poglądów, bez podawania przyczyny.
Go to the top of the page
+Quote Post
hwao
post 27.11.2006, 15:40:22
Post #4


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Eh, zbytnio kombinujesz...

Exception jest tylko wyrzucany wtedy, gdy nie możliwe jest wykonanie jakiegoś algorytmu z przyczyn technicznych. Po to się stosuje wyjątki w celu wyeliminowania if'ów w ważnych częściach programu, gdyż są nie wygodne i nie niosą że sobą jakiejś informacji.
Go to the top of the page
+Quote Post
jastu
post 27.11.2006, 15:45:58
Post #5





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

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


//edycja

W klasach generuemy błędy (przez throw) a w pliku łapiemy przez catch...ot cała filozofia...

Jak przechwycić błędy których nie przewidzimy ?

Ten post edytował jastu 27.11.2006, 20:01:44


--------------------
Powyższy post wyraża jedynie opinię autora w dniu dzisiejszym. Nie może on służyć przeciwko niemu w dniu jutrzejszym. Ponadto autor zastrzega sobie prawo zmiany poglądów, bez podawania przyczyny.
Go to the top of the page
+Quote Post
cicik
post 1.12.2006, 22:28:42
Post #6





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


Cytat(jastu @ 27.11.2006, 15:45:58 ) *
Jak przechwycić błędy których nie przewidzimy ?


  1. <?php
  2. try {
  3. caly skrypt
  4. }
  5. catch(Exception) { }
  6. ?>


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
JaRoPHP
post 1.12.2006, 22:38:23
Post #7





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Cytat(hwao @ 27.11.2006, 15:40:22 ) *
Eh, zbytnio kombinujesz...

Całkowicie się zgadzam. Wyjątki (jak sama nazwa wskazuje) służą do obsługi sytuacji wyjątkowych. Niestety można zauważyć, że często konstrukcja ta jest wykorzystywana bezmyślnie (np. zamiast klauzul if).


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
batman
post 1.12.2006, 22:49:08
Post #8





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Wyjątki w PHP5 stanowią bardzo dobrą alternatywę do wszędobylskich if-ów, które tylko zaśmiecają kod. Możesz stworzyć własne klasy wyjątków, które rozszerzają klasę Exception. Następnie w miejscu, gdzie wykonujesz jakiś kod, który może wygenerować używasz try{ ... } catch(TwojWyjatek $e) { ... }


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
cicik
post 3.12.2006, 17:08:04
Post #9





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


Cytat(JaRoPHP @ 1.12.2006, 22:38:23 ) *
Całkowicie się zgadzam. Wyjątki (jak sama nazwa wskazuje) służą do obsługi sytuacji wyjątkowych. Niestety można zauważyć, że często konstrukcja ta jest wykorzystywana bezmyślnie (np. zamiast klauzul if).


Nie zgadzam się z tobą.
Wyjątki często służą do wychodzenia z zagnieżdżonych wywołań funkcji, gdzie nie ma odpowiednika składni break, albo jego użycie wiązało by się z dużym kłopotem.
np:

  1. <?php
  2. try {
  3. for($i=0; $i < 10; $i++) {
  4. for($j=0; $j < 10; $j++) {
  5. for($k=0; $k < 10; $k++)
  6. funkcja();
  7. }
  8. }
  9. }
  10. catch(Exception $e) { }
  11.  
  12. function funkcja() {
  13. $j = 0
  14. while($j++ < 20) {
  15.  if(jakis_warunek)
  16.  throw new Exception;
  17. }
  18. }
  19. ?>


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
dzesi
post 4.12.2006, 23:02:40
Post #10





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 3.05.2006

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


Witam czy byście mogli mi przybliżyć bardziej bloki try i catch bo nierozumiem jak je zastosowac i podać przykład ? ,bardzo dziekuje za pomoc :roll2: worriedsmiley.gif
Go to the top of the page
+Quote Post
ActivePlayer
post 4.12.2006, 23:32:05
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


http://pl.php.net/exceptions
Go to the top of the page
+Quote Post
Sabistik
post 4.12.2006, 23:39:14
Post #12


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


~dzesi zapraszam do wortalu: http://wortal.php.pl/wortal/artykuly/proce...likacji/wyjatki
Go to the top of the page
+Quote Post
JaRoPHP
post 9.12.2006, 18:37:36
Post #13





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Cytat(cicik @ 3.12.2006, 17:08:04 ) *
Nie zgadzam się z tobą.
Wyjątki często służą do wychodzenia z zagnieżdżonych wywołań funkcji, gdzie nie ma odpowiednika składni break, albo jego użycie wiązało by się z dużym kłopotem.

Wyjątki są rozwiązaniem wygodnym, ale zostały stworzone do sytuacji wyjątkowych... Z definicji nie służą do "wychodzenia z zagnieżdżonych wywołań funkcji".
Cytat
Wyjątek to sygnał o błędzie w trakcie wykonania programu. Powstaje [wyjątek] na skutek nieoczekiwanego błędu.
/K. Barteczko/
Zbyt duże zagnieżdżenie funkcji @cicik jest może i błędem, ale programisty...

Za B.W. Kernighan, R. Pike "Lekcja programowania":
Cytat
Używaj wyjątków tylko w sytuacjach wyjątkowych... Często nadużywa się wyjątków... Fakt, że nie można otworzyć pliku, trudno traktować jako coś wyjątkowego; generowanie wyjątku w takim wypadku to... uderzający przykład przerostu inżynierii w oprogramowaniu.
Powinno się zarezerwować wyjątki dla naprawdę nieoczekiwanych zdarzeń, takich jak przepełnienie systemu plików czy błędy w obliczeniach zmiennopozycyjnych.

Generowanie wyjątku, aby zmienić sterowanie programem, jest wygodym rozwiązaniem, ale nie zawsze koniecznym i zdecydowanie zbyt często nadużywanym (i na pewno nie stanowi alternatywy dla składni if).


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
dr_bonzo
post 9.12.2006, 19:10:23
Post #14





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
Używaj wyjątków tylko w sytuacjach wyjątkowych... Często nadużywa się wyjątków... Fakt, że nie można otworzyć pliku, trudno traktować jako coś wyjątkowego; generowanie wyjątku w takim wypadku to... uderzający przykład przerostu inżynierii w oprogramowaniu.
Powinno się zarezerwować wyjątki dla naprawdę nieoczekiwanych zdarzeń, takich jak przepełnienie systemu plików czy błędy w obliczeniach zmiennopozycyjnych.


Dla mnie to jest przegiecie, to mam przy prawie kazdym dodawaniu sprawdzac czy nie wystapi przepelnienie i wyrzucic wyjatek?
Blad w obliczeniach zmiennoprzecinkowych? Jaki? NaN ? przeciez to wartosc przewidziana w specyfikacji liczb zm.przec. w IEEE754.

Gdy bedziemy uzywac wyjatkow tylko do obslugi zdarzen super-wyjatkowych (pomijam tu uzywanie wyjatkow do zmiany sterowania przebiegiem kodu -- tu na pewno sie nie nadaja; Ruby ma raise/rescue -- jako obsluga bledow i throw/catch do sterowania przebiegiem kodu. Koniec dygrasji) to kod bedzie wygladal jak w jezyku bez wyjatkow -- multum zagniezsdzonych ifow.

Grrr


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
LBO
post 9.12.2006, 20:02:15
Post #15





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


PHP5 Exception handling
Sądzę, że to pomoże.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2025 - 14:24