Co to jest wyjątek?
Błąd to nieoczekiwany wynik programu, którego sam program nie może obsłużyć.
Błędy są naprawiane przez naprawienie programu. Przykładem błędu może być nieskończona pętla, która nigdy nie przestaje działać.
Wyjątkiem jest nieoczekiwany wynik programu, który może być obsłużony przez sam program.
Przykłady wyjątków obejmują próbę otwarcia pliku, który nie istnieje.
Ten wyjątek można obsłużyć, tworząc plik lub udostępniając użytkownikowi opcję wyszukiwania pliku.
W tym samouczku nauczysz się:
- Po co obsługiwać wyjątek?
- Obsługa błędów PHP
- Przykłady obsługi błędów
- Różnica między błędami a wyjątkami
- Wiele wyjątków
- Testowanie kodu
Po co obsługiwać wyjątek?
- Unikaj nieoczekiwanych wyników na naszych stronach, które mogą być bardzo irytujące lub irytujące dla naszych użytkowników końcowych
- Popraw bezpieczeństwo naszych aplikacji, nie ujawniając informacji, które złośliwi użytkownicy mogą wykorzystać do ataku na nasze aplikacje
- Wyjątki PHP służą do zmiany normalnego przepływu programu w przypadku wystąpienia przewidywalnego błędu.
Obsługa błędów PHP
W przypadku wystąpienia błędu, w zależności od ustawień konfiguracyjnych, PHP wyświetla komunikat o błędzie w przeglądarce internetowej z informacją o błędzie, który wystąpił.
PHP oferuje wiele sposobów obsługi błędów.
Przyjrzymy się trzem (3) powszechnie używanym metodom;
- Instrukcje Die - funkcja die łączy w sobie funkcję echa i exit. Jest to bardzo przydatne, gdy chcemy wyprowadzić wiadomość i zatrzymać wykonanie skryptu, gdy wystąpi błąd.
- Niestandardowe procedury obsługi błędów - są to funkcje zdefiniowane przez użytkownika, które są wywoływane za każdym razem, gdy wystąpi błąd.
- Raportowanie błędów PHP - komunikat o błędzie zależny od ustawień raportowania błędów PHP. Ta metoda jest bardzo przydatna w środowisku programistycznym, gdy nie masz pojęcia, co spowodowało błąd. Wyświetlane informacje mogą pomóc w debugowaniu aplikacji.
Przykłady obsługi błędów
Spójrzmy teraz na kilka prostych przykładów z procedurami obsługi błędów.
Załóżmy, że opracowaliśmy aplikację, która wykorzystuje pliki tekstowe do przechowywania danych. Możemy chcieć sprawdzić istnienie pliku, zanim spróbujemy odczytać z niego dane.
Poniższy kod implementuje powyższy przykład.
Zakładając, że zapisałeś plik simple_error.php w folderze phptuts, otwórz adres URL http: //localhost/phptuts/simple_error.php
Otrzymasz następujące wyniki
Jak widać z powyższych wyników, sprawia to, że nasza aplikacja wygląda nieprofesjonalnie i może być irytująca dla użytkownika.
Zmodyfikujemy powyższy kod i napiszemy procedurę obsługi błędów dla aplikacji
Zakładając, że zapisałeś powyższy kod jako error_handling.php, otwórz adres URL http: //localhost/phptuts/error_handling.php
Uwaga: dobrą praktyką w zakresie bezpieczeństwa jest wyświetlanie komunikatu tak, jak pokazano powyżej, zamiast wyświetlać komunikat typu „Nie znaleziono pliku”.
Spójrzmy na inny przykład, w którym zastosowano niestandardową procedurę obsługi błędów.
Niestandardowy program obsługi błędów zostanie ustawiony jako domyślna funkcja obsługi błędów PHP i zasadniczo wyświetli numer błędu i komunikat.
Poniższy kod ilustruje implementację powyższego przykładu
Otwórz adres URL http: //localhost/phptuts/custom_error_handler.php , a otrzymasz następujące wyniki
.
Jak widać na powyższym przykładzie, niestandardowe programy obsługi błędów są w tym sensie potężne
- Pozwalają nam dostosować komunikaty o błędach.
- Niestandardowa obsługa błędów może również obejmować logowanie błędów do pliku / bazy danych, wysyłanie e-maili do programisty itp.
Przyjrzyjmy się teraz trzeciemu typowi obsługi błędów. Będziemy używać funkcji raportowania błędów w PHP. Ma następującą podstawową składnię
TUTAJ,
- „Error_reporting” to funkcja raportowania błędów PHP
- „$ Report_level” jest opcjonalne, można go użyć do ustawienia poziomu raportowania. Jeśli nie określono poziomu raportowania, PHP użyje domyślnego poziomu raportowania błędów określonego w pliku php.ini.
Poziom raportowania | Opis | Przykład |
---|---|---|
E_WARNING | Wyświetla tylko komunikaty ostrzegawcze. Nie wstrzymuje wykonywania skryptu | error_reporting (E_WARNING); |
E_NOTICE | Wyświetla powiadomienia, które mogą wystąpić podczas normalnego wykonywania programu lub mogą być błędem. | error_reporting (E_ NOTICE); |
E_USER_ERROR | Wyświetla błędy wygenerowane przez użytkownika, tj. Niestandardową obsługę błędów | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Wyświetla komunikaty ostrzegawcze wygenerowane przez użytkownika | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Wyświetla powiadomienia wygenerowane przez użytkownika | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Wyświetla błędy, które nie są krytyczne i można je obsłużyć za pomocą niestandardowych programów obsługi błędów | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Wyświetla wszystkie błędy i ostrzeżenia | error_reporting (E_ ALL); |
Różnica między błędami a wyjątkami
- Wyjątki są generowane i mają zostać przechwycone, podczas gdy błędy są generalnie nie do naprawienia.
-
Wyjątki są obsługiwane w sposób obiektowy.
Oznacza to, że zostanie zgłoszony wyjątek; tworzony jest obiekt wyjątku zawierający szczegóły wyjątku.
Poniższa tabela przedstawia metody obiektów wyjątków
metoda | Opis | Przykład |
---|---|---|
getMessage () | Wyświetla komunikat o wyjątku |
getMessage();?> |
Zdobądź szyfr() | Wyświetla kod numeryczny reprezentujący wyjątek |
getCode();?> |
dostać plik() | Wyświetla nazwę pliku i ścieżkę, w której wystąpił wyjątek |
getFile();?> |
getLine () | Wyświetla numer wiersza, w którym wystąpił wyjątek |
getLine();?> |
getTrace () | Wyświetla tablicę śledzenia wstecznego przed wyjątkiem |
getTrace());?> |
getPrevious () | Wyświetla poprzedni wyjątek przed bieżącym |
getPrevious();?> |
getTraceAsString () | Wyświetla ślad wyjątku jako ciąg znaków zamiast tablicy |
getTraceAsString();?> |
__toString () | Wyświetla cały wyjątek jako ciąg |
__toString();?> |
Poniżej znajduje się podstawowa składnia do zgłaszania wyjątku.
TUTAJ,
- „Throw” to słowo kluczowe używane do zgłaszania wyjątku
- „Nowy wyjątek (…)” tworzy obiekt wyjątku i przekazuje jako parametr komunikatu „To jest przykład wyjątku”.
Powyższy kod generuje następujący komunikat.
Przyjrzymy się teraz przykładowi, który implementuje wyjątki rzutowania i przechwytywania.
Zmodyfikujemy powyższy przykład i uwzględnimy próbę, rzut i złapanie.
Ma następującą podstawową składnię.
TUTAJ,
- „Try {…}” to blok kodu do wykonania, który może potencjalnie zgłosić wyjątek
- „Catch (Exception $ e) {…}” to blok kodu, który przechwytuje zgłoszony wyjątek i przypisuje obiekt wyjątku do zmiennej $ e.
Poniższy kod przedstawia podstawowy przykład wyjątku z zaimplementowanym wyjątkiem try, throw i catch.
Program celowo zgłasza wyjątek, który następnie przechwytuje.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Otwórz adres URL http: //localhost/phptuts/exception_handling.php Otrzymasz następujące wyniki.
Możliwe jest również utworzenie wielu wyjątków dla jednej instrukcji php try w zależności od typu zgłoszonego wyjątku.
Zobacz artykuł o MySQL, dostęp do danych PHP
… Aby zapoznać się z przykładami implementacji wielu wyjątkówWiele wyjątków
Wiele wyjątków używa wielu bloków try catch do obsługi zgłoszonych wyjątków. Wiele wyjątków jest przydatnych, gdy;
- Chcesz wyświetlić dostosowany komunikat w zależności od zgłoszonego wyjątku
- Chcesz wykonać unikatową operację w zależności od zgłoszonego wyjątku
Poniższy schemat blokowy ilustruje sposób działania wielu wyjątków
Spójrzmy na przykład, w którym zastosowano wiele wyjątków.
Zmodyfikujemy kod, który dzieli liczbę przez przekazany mianownik.
Spodziewamy się wystąpienia dwóch rodzajów wyjątków;
- Dzielenie przez zero
- Dzielenie przez liczbę ujemną
Dla uproszczenia będziemy wyświetlać typ wyjątku tylko w naszych blokach catch.
Do zgłaszania wyjątków służy PHP wbudowane w klasę Exception.
Stworzymy dwie klasy, które rozszerzają klasę wyjątków i używamy ich do zgłaszania wyjątków.
Poniższy kod przedstawia implementację.
Testowanie kodu
Zakładamy, że zapisałeś plik multiple_exceptions.php w folderze phptuts.
Przejdź do adresu URL http: //localhost/phptuts/multiple_exceptions.php
Przełącz się z powrotem do pliku PHP i podaj -1 jako parametr, jak pokazano na poniższym diagramie.
Przejdź do adresu URL http: //localhost/phptuts/multiple_exceptions.php .
Jakie otrzymujesz wyniki? Przekaż 3 jako parametr.
Jakie otrzymujesz wyniki?
Podsumowanie
- Błędy to nieoczekiwane wyniki generowane przez kod PHP
- Obsługa błędów poprawia wydajność aplikacji
- PHP ma wbudowane funkcje, których można użyć do dostosowania sposobu, w jaki PHP zgłasza błędy
- Wyjątki są podobne do błędów, ale po rzuceniu można je przechwycić za pomocą bloku catch.
- Wyświetlanie komunikatów o błędach zawierających informacje o błędach jest uważane za złą praktykę w zakresie bezpieczeństwa.