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




@Orzeszek: Nie widzę problemu by wyjątki były wewnętrznym sposobem na implementację obsługi błędów. Zauważ bowiem, że jak napisałem, wyjątek jest podzbiorem błędów, których wystąpienie jest problematyczne lub niemożliwe do wychwycenia. Możemy się jednak nimi posłużyć by sytuacja stała się przewidywalna.

Wyjątek jest pewną reprezentacją błędu z racji tego, iż jest jego podzbiorem. Czy więc jest różnica w tym, że zwrócę obiekt klasy Object z komunikatem czy obiekt klasy Exception dziedziczący po Object z dokładnie tym samym komunikatem? To już nieistotna forma reprezentacji. A tak właśnie wygląda to w językach, które nazywasz obiektowymi. Inne opakowanie na dokładnie to samo. I dokładnie to samo stwierdzasz dalej pisząc, że " To po prostu informacja o tym ze cos idzie nie tak podana w roznym opakowaniu." i tym samym zwrócenie null, false, komunikatu, czy obiektu określonej klasy to tylko nieistotne opakowanie. Ja bowiem piszę nie o tym czy obiekt zwracany jest nullem, intem czy obiektem klasy ale logiką tego co jest błędem, a co sytuacją wyjątkową i do czego mechanizm wyjątków powinien być stosowany tak naprawdę. By podać jakiś przykład bardziej "ludzki" z walidacją... Skoro mogę wykryć błąd poprawności danych poprzez choćby użycie wyrażenia regularnego, to mogę to zrobić w dowolny sposób, niekoniecznie od razu sięgając do wyjątków, by zasygnalizować to aplikacji. Jest to owszem forma wygodna, ale zaczyna się niebezpiecznie zbliżać do kontroli przepływu, a nie po to ten mechanizm wymyślono. Tutaj w zupełności wystarczy zwykły IF. Co gorsze, wyjątki w momencie zaistnienia wyskakują z normalnego przebiegu by znaleźć najbliższy pasujący blok catch. Myślisz, że pisanie Java to od razu "ach i och"? Mało to ja widziałem kodów gdzie było
try{
// różne operacje;
} catch ( Exception zmienna ) {
//kompletnie nic
}
//dalsze operacje;
a całość byle tylko wyjątek złapać i ukryć dla postronnych. Brzydki hack, ale wbrew pozorom często stosowany, nie tylko wśród początkujących. Czym to się różni od @ w PHP? Niczym. Jedyna różnica to fakt, że w PHP nie ma ujednolicenia co jest błędem, a co wyjątkiem. Zaś w takiej Javie każdy błąd = wyjątek. Co moim zdaniem jest zbyt dużym uogólnieniem, byle tylko ułatwić pewne rzeczy w czasie programowania. Tyle że kosztem tego jest to, iż nieraz by coś było można normalnie obsłużyć, trzeba wykonać choćby kilka rzutowań po drodze.

Co do pisania handlerów to akurat swój kod pisać potrafię na tyle, że nie potrzebuję małpek czy error handlerów zamieniających error na exception, to raz. A dwa, że error handler którego jedynym celem jest zamiana komunikatu na obiekt klasy Exception to dla mnie bezsens. Nic mi on nadal bowiem mówić nie będzie poza samym komunikatem. Nie po to są wyjątki i błędy by sobie jedne drugimi zastępować, skoro mają ciutkę inny zakres kompetencji.

Poza tym trudno powiedzieć o naleciałościach PHP-owych, skoro poznałem go kilka lat po tym, gdy już pisałem w C++ czy Javie, a na forum narzekam na PHP i jego idiotyzm czy braki w porównaniu do innych języków, głównie C++
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: 2.10.2025 - 18:55