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: sytuacja z jpg i jego formatem jest trochę rozmyta. Jeśli bowiem masz na myśli jakieś proste sprawdzenie typu rozszerzenia czy mime bez faktycznego sprawdzenia zawartości pliku jakimś narzędziem mogącym zweryfikować informacje nagłówkowe pliku i stwierdzić, że mamy faktycznie do czynienia z poprawnym jpg, to fakt. można przemycić dowolny plik do obróbki i tutaj żadne ifowanie nie pomoże oraz wyjątek JEST na miejscu. Ale jeśli ktoś używa wyjątków by sprawdzić czy mu user podesłał jpg czy png to już z deczka jest to nadużywanie tego narzędzia.

I tak. Wyjątek sam w sobie zwraca nie tylko komunikat, ale informację czego dotyczy już po samej klasie jaką jest. Co innego bowiem Image_type_Exception('Not available'), a co innego Image_type_Exception('Licence restrictions'), ale już zupełnie inna bajka to Image_size_Exception('Input size too large to process'), gdzie już sam typ nas informuje z jaką kategorią wyjątku mamy do czynienia, ale komunikat może to uściślić.

@Orzeszekk: walidacja to nie jest coś co robi się "bo tak powinno się robić", a tym bardziej NIE zostawia się jej jedynie po stronie użytkownika, ale obowiązkowo robi na serwerze. Po stronie usera to jedynie "dodatek", by nie wysyłać tak często błędnych danych.
I nie masz racji do końca z widokiem formularza. W moich skryptach za wyświetlanie strony z błędami oraz samego formularza odpowiada TEN SAM widok, ale w zależności od przekazanych mu danych wyświetla je odpowiednio sformatowane. Wszystko bowiem w nim zależy od przekazanych mu struktur danych. Za każdym razem ma pełen komplet danych, ale za każdym razem one mogą być inne jednocześnie.
Poza tym co mi po komunikacie jako wyjątku? Równie dobrze mogę wysłać stringa lub tablicę stringów i sprawdzać czy jest pusta czy nie (IMG:style_emoticons/default/wink.gif) Siła wyjątku leży już w samym fakcie, że nie samym komunikatem daje on nam informacje. Mogę bowiem jak wspomniałem wyżej mogę łapać choćby klasę wyjątku Image_Exception oraz Image_processing_Exception i już na dzień dobry wiem, że jedna jest mocno ogólna, a druga szczegółowa i nie wszystko tam trafi oraz zależy mi na wyłapaniu ewentualnym tego, a nie innego typu wyjątku, gdyż spowodować on może wywalenie się aplikacji, zaś pozostałe są mniej "awaryjnogenne". Przy czym kompletnie nie wiem co może się stać, ale zależy mi by temu zapobiec/przeciwdziałać w jakiś sposób. A sam wyjątek rzucam właśnie wtedy gdy coś się wywalić może i nie jestem w stanie przewidzieć czemu oraz jako komunikat zapewne zrzut stosu załączę, by wyłapać co poszło i gdzie nie tak, by to zdebugować.

I znowu darko wspomniał jedną rzecz, o której PHPowcy zwyczajnie nie mają dużego pojęcia, bo za mało mają do czynienia z "owyjątkowionymi" bibliotekami... Normą jest bowiem wśród naszej braci łapanie w taki sposób
  1. catch( Exception $message ) {...}

i gdy nagle łapiemy coś czego nie powinno być to jest mega zonk dla większości, bo "skąd i dlaczego?". A zwłaszcza gdyby sypnęła by wyjątkiem biblioteka standardowa, której to wyjątków zapewne większość by nie znała. A jest to rzecz normalna w takiej choćby Javie, gdzie wyjątki się sypią jak igły z choinki na trzech króli, przy byle pierdółce, na pół ekranu (IMG:style_emoticons/default/wink.gif)
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: 25.09.2025 - 02:54