#jedenasta37 Jak działają wyjątki w PHPie? Rzuca się je, przechwytuje, obsługuje, co to w ogóle znaczy? To po kolei!
Już wiesz..
..czym są klasy, metody, co to jest dziedziczenie, umiesz korzystać z instrukcji sterującej if i pisać funkcje.
Jeśli nie znasz jeszcze tych pojęć i nie rozumiesz ich, możesz mieć kłopot ze zrozumieniem dalszej części artykułu, ale i tak przeczytaj – oswoisz się z pojęciami, coś zapamiętasz i wyrobisz sobie ogólne wyobrażenie. Wielu osobom w branży już to wystarcza do wypowiadania się na spotkaniach teamu, a co ciekawsze – tyle wystarczy, żeby skutecznie zabrać głos, doradzić, wskazać kierunek. Jak masz ogólne pojęcie / wyobrażenie, że coś istnieje, to resztę zawsze możesz doczytać!
Kiedy stosujemy wyjątki?
Zadaniem programisty jest przewidzieć wszystkie miejsca w systemie, które mogą się wykrzaczyć. A uwierzcie mi, że wykrzacza się coś często. Większość takich przewidzianych nieprzewidzianych sytuacji obsługujemy w sposób niezauważony dla użytkownika – taki jest ideał i często się to udaje, ale bywa też tak, że nie jesteśmy w stanie obsłużyć – pojawia się taki błąd, który uniemożliwia dalsze działanie skryptu. Taki błąd nazywamy wyjątkiem. Trzeba go przechwycić na wyższym poziomie i elegancko obsłużyć, zwykle w ramach obsługi wyświetlamy użytkownikowi ładny komunikat, że coś poszło nie tak. Albo pomijamy jakąś część skryptu, wycofujemy z bazdy dane, które już częściowo zostały w niej zapisane, a byłyby niespójne itp. Myślę, że w kursie zrobimy sobie obsługę wyjątkami kilku realnych sytuacji w ramach ćwiczeń.
Lekki przykład
Kiedy np. mamy funkcję, której zadaniem jest dzielenie dwóch liczb: funkcja przyjmuje dzielną i dzielnik, zwraca wynik, to co może pójść nie tak? Zastanów się przez moment, nie leć dalej z czytaniem.
Jesteś osobą, która ma za zadanie napisać taki fragment kodu: napisz funkcję, która otrzymuje dwie liczby i zwraca wynik dzielenia. Co piszesz?
public function quotient($a, $b) { return $a / $b; }
Działa? No działa, ale może zdarzyć się sytuacja, w której nie zadziała – przewidziałaś ją już?
Jeśli w trakcie wykonywania skryptu Twoja piękna funkcja dostanie $b = 0, dzielenie przez $b będzie niemożliwe, bo jest niewykonalne. I co wtedy? To jest dobre miejsce na wyjątek.
Rzucanie czaru: „wyjątek”
Żeby wywołać wyjątek, musimy go rzucić, robi się to za pomocą słowa kluczowego throw po którym następuje utworzenie nowego obiektu klasy Exception lub jej pochodnej (takiej, co po niej dziedziczy) i przekazanie jej komunikatu błędu (można przekazać więcej w kontruktorze Exception, ale o tym innym razem). Utworzony obiekt wyjątku jest wtedy rejestrowany i istnieje w pamięci procesu, więc też będziemy mogli się w przyszłości do niego odnieść. Wygląda to tak:
throw new Exception('Division by zero.');
Oczywiście, najpierw sprawdzamy, czy $b = 0, jeśli tak, rzucamy wyjątek, co przerwie dalsze działanie funkcji i odda sterowanie wyżej. Jeśli nie, funkcja zostanie wykonana do końca i dopiero return zwróci wynik i odda sterowanie, czyli wszystko zgodnie z planem. Funkcja z dodanym czarem wyjątku:
public function quotient($a, $b) { if($b == 0) { throw new Exception('Division by zero.'); } return $a / $b; }
Co dalej robimy z tym typkiem Exceptionem?
To jest bardzo dobre pytanie! Nie można sobie rzucać klątw w systemie ot tak nieodpowiedzialnie, nie łapiąc ich zaraz troszkę wyżej. Wyjątku użytkownik końcowy widzieć nie powinien, bo sypie mu to kodami błędu po ekranie i internety się potem śmieją z takiego programisty.
Za tydzień o przechwytywaniu i obsługiwaniu wyjątków! Miało być dzisiaj, ale pomyślałam, że krótsze wpisy łatwiej czytać zabieganym matkom i ojcom, zgadzacie się z tym, czy lepiej puścić całą wiedzę w jednym bardzo długim wpisie? Dajcie znać co myślicie! Mam nadzieję, że mój oplatający i rozbudowany sposób opowiadania pomaga, a nie przeszkadza.
#programujBoWarto
One thought on “PHP: rzucanie wyjątków”