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
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


~Orzeszekk
To, że nie jest to sytuacja wyjątkowa, nie oznacza, że jest to sytuacja normalna. Poniekąd sam sobie zapracowałeś na to odstępstwo pozwalając wpisywać użytkownikowi cokolwiek w pole przeznaczone na datę. Ja wolę zapobiegać niż leczyć i nie muszę komplikować kodu stosując wyjątki tam, gdzie nie jest ich miejsce. Oczywiście nie mogę i nie chcę nikomu zabronić stosowania wyjątków do sterowania programem w normalnych sytuacjach, przewidzianych przez programistę poprzez odpowiednią walidację danych (po to piszesz walidację, żeby takie sytuacje przewidzieć i dopiero to, czego nie przewidziałeś lub nie mogłeś przewidzieć - obejmujesz w klamry try {(...) throw (...)} catch(...){}). Nie stosuję wyjątków do kontrolowania danych pochodzących od użytkownika, php oferuje tyle standardowych narzędzi, że w zupełności wystarczy:
- wymuszenie określonego typu
- i długości danych
- rzutowanie zmiennej do określonego typu
- ustawienie domyślnej wartości w przypadku danej spoza zakresu

~Crozin
Oprócz tego, co napisałeś czy nie jest tak, że wyjątki stosuje się wtedy, jeśli można przywrócić normalny stan aplikacji sprzed wystąpienia problemu (tj. po obsłużeniu błędu)? Czy funkcja w php czytająca plik rzuci wyjątek czy zwróci false? Znowu wracamy do kwestii indywidualnej każdego z nas - tj. czy używać wyjątków do sterowania logiką aplikacji czy tylko w sytuacjach faktycznie wyjątkowych, gdzie zostawiamy wolne pole do obsługi napotkanego problemu? Uważam, że wyjątki powinno stosować się tylko wtedy, jeśli nie możemy określić powodu napotkanego błędu lub przewidzieć zachowania danego bloku instrukcji z zestawem danych, których nie możemy ani sprawdzić, ani zawczasu przewidzieć ich wartości.

Ten post edytował darko 31.10.2011, 16:03:58
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Cytat(darko @ 31.10.2011, 16:03:17 ) *
~Orzeszekk
To, że nie jest to sytuacja wyjątkowa, nie oznacza, że jest to sytuacja normalna. Poniekąd sam sobie zapracowałeś na to odstępstwo pozwalając wpisywać użytkownikowi cokolwiek w pole przeznaczone na datę. Ja wolę zapobiegać niż leczyć i nie muszę komplikować kodu stosując wyjątki tam, gdzie nie jest ich miejsce. Oczywiście nie mogę i nie chcę nikomu zabronić stosowania wyjątków do sterowania programem w normalnych sytuacjach, przewidzianych przez programistę poprzez odpowiednią walidację danych (po to piszesz walidację, żeby takie sytuacje przewidzieć i dopiero to, czego nie przewidziałeś lub nie mogłeś przewidzieć - obejmujesz w klamry try {(...) throw (...)} catch(...){}). Nie stosuję wyjątków do kontrolowania danych pochodzących od użytkownika, php oferuje tyle standardowych narzędzi, że w zupełności wystarczy:
- wymuszenie określonego typu
- i długości danych
- rzutowanie zmiennej do określonego typu
- ustawienie domyślnej wartości w przypadku danej spoza zakresu.


Jak chcesz wymusic na uzytkowniku wpisanie w pole tekstowe formatu w dacie RRRR-MM-DD a nie swojego imienia lub wulgaryzmu? chyba stojąc nad nim z bejzbolem?

No chyba ze HTML5 wprowadza input type="date" ?

Bo chyba nie nazywasz wymuszeniem na uzytkowniku napisanie javascriptu do twojej strony ktory blokuje przycisk submit jeżeli uzytkownik nie poda poprawnej daty, bo jesli ktos bedzie zlosliwy to wyłączy javascript, wyśle ci perlem czy mozillą firefox spreparowany formularz. I twój skrypt juz nie bedzie mial na to odpowiedzi, poniewaz zalozyles ze wymusiles na userze poprawną datę.

Twoj argument o poprawieniu danych jest w PHP bez sensu, poniewaz, widok wyswietlajacy formularz do wypelnienia i widok wyswietlajacy komunikat o poprawnym wykonaniu akcji/błędzie to są 2 różne uruchomienia skryptu. Ten skrypt (widok) ktory odbiera dane z formularza i na ich podstawie tworzy cos na stronie: news, nowe konto, nowe <tu wstaw cos> ma prawie zawsze tyle do zrobienia: odczytac dane z formularza, zapisac je i wyswietlic komunikat o powodzeniu lub błędzie.


A jesli chodzi o obcy kod nie ma lepszego spososbu na poinformowanie o błędzie niz odpowiednio spreparowany wyjątek. Wyjątek pozwala przemycic w kodzie sensowny komunikat na co nie pozwala funkcja rzucająca błędy lub return liczba.

Ten post edytował Orzeszekk 31.10.2011, 22:20:43
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 08:08