Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyjątki, czyli kiedy je stosujemy?
podgur
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 6.04.2009

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


Witam. Chciałem się dowiedzieć, kiedy NALEŻY stosować wyjątki w OOP? Chodzi mi o konkretne przykłady i jakieś dobre wytłumaczenie.
Wyjątki jak sama nazwa wskazuje, ale np .

Kod
$a=5;
$b=0;

if($a<$5){

...
}

Też mogli byśmy użyć wyjątków? i czy powinno się?

bless
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Crozin: to o czym piszesz to ułomność języka, który pozwala na pisanie bez jakiejkolwiek kontroli nad czymkolwiek, zrzucając wszystko na interpreter. Zwróćmy uwagę, że taka Java jest także językiem interpretowanym (przez JVM), ale jest prekompilowana do wersji przez JVM zrozumiałej. I wyjątki jako takie są w dużej mierze na etapie prekompilacji wyłapywane. Co nie zmienia faktu, że można kod napisać także w niej "po PHP-owemu", gdzie będzie cacy jeśli zrobimy jak chciał programista, ale jeden "byk" i wywali nam całą aplikację. Nie kłócę się też ze stwierdzeniem, że wyjątki to wymuszenie obsługi. To co po raz n-ty powtarzam to stosowanie tego mechanizmu jako remedium na wszystko co nieraz przeradza się w kuriozum. A co do "spostrzeżenia" to nie sugeruję, iż Ty uważasz za zamiennik to, ale że część programistów tak ten mechanizm stosuje i jest to moim zdaniem złe. Co do zmiany przepływu to wiesz dobrze jak działają wyjątki. One nie powodują zmiany przepływu, ale "wyskoczenie" z normalnego przepływu do najbliższego pasującego bloku catch. Nigdy jednak nie wiesz czy będzie to po 1, 5 czy 15 instrukcji wewnątrz bloku. Gdyby to do czegoś porównać, to chyba najprędzej do użycia goto, które także powoduje przejście do określonego miejsca w kodzie (etykiety), a które byłoby równoważne z blokiem catch.

@oboje: no właśnie... Świadomie ignorujemy. Obejmujemy blokiem try wszystkie operacje, gdyż wiemy jakiego typu wyjątek dostaniemy i tym samym usuwa się go z widoku. Jednocześnie jeśli w owym (owych) XML dostaniemy wyjątek tej samej klasy, ale tyczący czegoś innego, nawet się o tym nie dowiemy. W efekcie takie podejście ma sens identyczny ze stosowaniem @ przy operacjach w PHP. Można nawet nie wiedzieć, że coś działa nieprawidłowo, gdyż zamiast obsłużyć błąd, ignorujemy go dla naszej wygody lub "kompaktowości" kodu. Ja wiem, że to jest fajne i przyjemne rozwiązanie, ale podobnie jak @ powoduje problemy z debugiem aplikacji. W wersji batmana z owymi xml-ami tracę bowiem znacznie bardziej kontrolę nad tym co otrzymuję z serwerów, niż gdybym miał zrobić te ileś if-ów. Więcej pracy dla mnie, ale teżi kontrola nad całością większa i nie wyleję dziecka z kąpielą.

Poza tym zwróćmy uwagę na jeden fakt... Zazwyczaj nie mamy jednej klasy wyjątku, ale całą ich hierarchię. Kod Crozina jest mocno uproszczony, gdyż przecież nie walimy kodu całej aplikacji w try i na końcu tylko bloczki catch uzupełniamy. Zazwyczaj bloki try-catch obejmują jedynie te fragmenty, które podejrzewamy o możliwe zaistnienie problemu określonego typu lub typów.
Go to the top of the page
+Quote Post

Posty w temacie
- podgur   Wyjątki, czyli kiedy je stosujemy?   30.03.2010, 21:23:32
- - zend   [PHP] pobierz, plaintext function getDb() ...   30.03.2010, 21:38:56
- - podgur   No tak, ale czy zamiast Kodfunction getDb(...   30.03.2010, 21:49:52
- - Zyx   Wyjątki nie należą do programowania obiektowego. W...   30.03.2010, 22:17:23
- - podgur   Wiem że nie należy, ale zazwyczaj używa się ich w ...   31.03.2010, 07:22:42
- - nospor   To zrob eksperyment: raz uzywaj zwyklych IF a raz ...   31.03.2010, 07:38:07
- - thek   Jak sama nazwa mówi, wyjątki powinno się stosować ...   31.03.2010, 09:19:32
- - podgur   W przypadku np. połączenia z baza danych i połącze...   31.03.2010, 09:22:58
- - zend   Tak, błąd przy wprowadzaniu danych od użytkownika ...   31.03.2010, 15:38:48
|- - Orzeszekk   Cytat(zend @ 31.03.2010, 15:38:48 ) T...   31.10.2011, 11:37:42
- - podgur   zend dziękuje:) Posłucham się i poćwiczę Pozdrawi...   1.04.2010, 22:18:07
- - Crozin   Po co jakieś ImageException, które jedyne co robi ...   2.04.2010, 00:05:27
- - podgur   Zaraz pozmieniam:) dzięki. Jeżeli ktoś ma jeszcze ...   2.04.2010, 08:40:38
- - mg2   Postanowiłem mój pierwszy post, napisać właśnie w ...   19.02.2011, 23:45:47
- - fifi209   "Standardowo" PDO rzuca wyjątkami z tego...   20.02.2011, 00:20:13
- - darko   Podobnie, jak cała biblioteka standardowa php. htt...   20.02.2011, 00:23:17
- - darko   ~Orzeszekk walidacja danych pochodzących od użytko...   31.10.2011, 11:57:23
- - Orzeszekk   OK, nie rozumiem nadal ja jako autor kodu przewid...   31.10.2011, 14:25:07
- - darko   Cytat(Orzeszekk @ 31.10.2011, 14:25:0...   31.10.2011, 14:52:54
- - Crozin   @darko: Błędne dane pochodzące z żądania HTTP są t...   31.10.2011, 15:27:42
- - Orzeszekk   Darko to ze wyjątki służą do sterowania aplikacją ...   31.10.2011, 15:42:51
- - darko   ~Orzeszekk To, że nie jest to sytuacja wyjątkowa,...   31.10.2011, 16:03:17
|- - Orzeszekk   Cytat(darko @ 31.10.2011, 16:03:17 ) ...   31.10.2011, 21:52:32
|- - darko   Post scriptum Cytat(Orzeszekk @ 31.10.2011, 2...   1.11.2011, 01:50:44
- - Crozin   @darko: A masz jakiś pomysł jak zareagować na sytu...   31.10.2011, 16:17:59
|- - darko   Cytat(Crozin @ 31.10.2011, 16:17:59 )...   31.10.2011, 18:21:25
- - Crozin   CytatDokładnie, dlatego najczęściej obejmuję bloki...   31.10.2011, 20:46:54
- - darko   <PASS> oho ~thek coś pisze   1.11.2011, 01:19:53
- - thek   To może ja nieco dodam od siebie... Pracowałem tro...   1.11.2011, 01:24:03
- - thek   @Crozin: sytuacja z jpg i jego formatem jest troch...   1.11.2011, 02:19:32
- - batman   Pozwolę sobie wtrącić się to tej jakże niezwykle i...   1.11.2011, 02:43:37
- - Crozin   CytatPrzykład? Plik istnieje, dane są ok, użytkown...   1.11.2011, 02:59:56
- - thek   Czym dla mnie się różnią? Wyjątek i błąd to dla mn...   1.11.2011, 14:23:09
- - Orzeszekk   Crozin jako chyba jedyna osoba z dyskutujących zac...   1.11.2011, 14:26:25
- - thek   A co do przykładu z dwoma formami zgłaszania błędó...   1.11.2011, 14:34:19
- - Orzeszekk   Są porównywalne, mozesz kompletnie zastąpić wyjąte...   1.11.2011, 14:42:15
- - Crozin   @thek: Taka osobista uwaga. Staraj się jednak pisa...   1.11.2011, 16:17:28
- - thek   @Orzeszek: Nie widzę problemu by wyjątki były wewn...   1.11.2011, 16:22:40
- - Crozin   [JAVA] pobierz, plaintext catch (SomeException...   1.11.2011, 17:15:41
- - batman   Cytat(thek @ 1.11.2011, 16:22:40 ) Ma...   1.11.2011, 17:44:03
- - thek   @Crozin: to o czym piszesz to ułomność języka, któ...   2.11.2011, 00:29:28
- - batman   CytatJednocześnie jeśli w owym (owych) XML dostani...   2.11.2011, 08:10:50
- - thek   Właśnie dlatego napisałem, nie "wyjatek...   2.11.2011, 09:46:27


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: 26.09.2025 - 13:40