PHP - Obsługa błędów i wyjątków
Obsługa błędów to proces wychwytywania błędów zgłaszanych przez program, a następnie podejmowania odpowiednich działań. Jeśli poprawnie poradzisz sobie z błędami, może to prowadzić do wielu nieprzewidzianych konsekwencji.
Obsługa błędów w PHP jest bardzo prosta.
Korzystanie z funkcji die ()
Pisząc swój program PHP, przed kontynuowaniem należy sprawdzić wszystkie możliwe błędy i podjąć odpowiednie działania, gdy jest to wymagane.
Spróbuj wykonać poniższy przykład bez posiadania /tmp/test.xt plik iz tym plikiem.
<?php
if(!file_exists("/tmp/test.txt")) {
die("File not found");
}else {
$file = fopen("/tmp/test.txt","r");
print "Opend file sucessfully";
}
// Test of the code here.
?>
W ten sposób możesz napisać wydajny kod. Korzystając z powyższej techniki, możesz zatrzymać program, gdy tylko wystąpi błąd i wyświetlić bardziej znaczący i przyjazny dla użytkownika komunikat.
Definiowanie niestandardowej funkcji obsługi błędów
Możesz napisać własną funkcję do obsługi każdego błędu. PHP zapewnia strukturę do definiowania funkcji obsługi błędów.
Ta funkcja musi obsługiwać co najmniej dwa parametry (poziom błędu i komunikat o błędzie), ale może akceptować do pięciu parametrów (opcjonalnie: plik, numer wiersza i kontekst błędu) -
Składnia
error_function(error_level,error_message, error_file,error_line,error_context);
Sr.No | Parametr i opis |
---|---|
1 | error_level Wymagane - określa poziom raportu o błędach dla błędu zdefiniowanego przez użytkownika. Musi być liczbą wartości. |
2 |
error_message Wymagane - określa komunikat o błędzie dla błędu zdefiniowanego przez użytkownika |
3 |
error_file Opcjonalne - określa nazwę pliku, w którym wystąpił błąd |
4 | error_line Opcjonalne - określa numer wiersza, w którym wystąpił błąd |
5 | error_context Opcjonalne - określa tablicę zawierającą wszystkie zmienne i ich wartości używane w momencie wystąpienia błędu |
Możliwe poziomy błędów
Te poziomy raportów o błędach to różne typy błędów, do których można użyć procedury obsługi błędów zdefiniowanej przez użytkownika. Te wartości cab są używane w połączeniu z użyciem| operator
Sr.No | Stała i opis | Wartość |
---|---|---|
1 | .E_ERROR Błędy krytyczne w czasie wykonywania. Wykonywanie skryptu zostaje zatrzymane |
1 |
2 | E_WARNING Niekrytyczne błędy czasu wykonywania. Wykonywanie skryptu nie zostaje wstrzymane |
2 |
3 | E_PARSE Błędy analizy w czasie kompilacji. Błędy analizy powinny być generowane tylko przez parser. |
4 |
4 | E_NOTICE Uwagi dotyczące czasu pracy. Skrypt znalazł coś, co może być błędem, ale może się również zdarzyć podczas normalnego uruchamiania skryptu |
8 |
5 | E_CORE_ERROR Błędy krytyczne występujące podczas pierwszego uruchomienia PHP. |
16 |
6 | E_CORE_WARNING Niekrytyczne błędy czasu wykonywania. Dzieje się tak podczas pierwszego uruchomienia PHP. |
32 |
7 | E_USER_ERROR Błąd krytyczny wygenerowany przez użytkownika. To jest jak E_ERROR ustawione przez programistę za pomocą funkcji PHP trigger_error () |
256 |
8 | E_USER_WARNING Niekrytyczne ostrzeżenie wygenerowane przez użytkownika. To jest jak E_WARNING ustawione przez programistę za pomocą funkcji PHP trigger_error () |
512 |
9 | E_USER_NOTICE Powiadomienie wygenerowane przez użytkownika. To jest jak E_NOTICE ustawione przez programistę za pomocą funkcji PHP trigger_error () |
1024 |
10 | E_STRICT Uwagi dotyczące czasu pracy. Włącz, aby PHP sugerowało zmiany w kodzie, które zapewnią najlepszą interoperacyjność i kompatybilność w przód. |
2048 |
11 | E_RECOVERABLE_ERROR Wykrywalny błąd krytyczny. Jest to podobne do E_ERROR, ale może zostać przechwycone przez uchwyt zdefiniowany przez użytkownika (zobacz także set_error_handler ()) |
4096 |
12 | E_ALL Wszystkie błędy i ostrzeżenia, z wyjątkiem poziomu E_STRICT (E_STRICT będzie częścią E_ALL od PHP 6.0) |
8191 |
Wszystkie powyższe poziomy błędów można ustawić za pomocą wbudowanej funkcji bibliotecznej PHP, gdzie poziom cab jest dowolną wartością zdefiniowaną w powyższej tabeli.
int error_reporting ( [int $level] )
Poniżej przedstawiono sposób tworzenia jednej funkcji obsługi błędów -
<?php
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
?>
Po zdefiniowaniu własnego modułu obsługi błędów należy go ustawić za pomocą wbudowanej biblioteki PHP set_error_handlerfunkcjonować. Przyjrzyjmy się teraz naszemu przykładowi, wywołując funkcję, która nie istnieje.
<?php
error_reporting( E_ERROR );
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
//set error handler
set_error_handler("handleError");
//trigger error
myFunction();
?>
Obsługa wyjątków
PHP 5 ma model wyjątków podobny do modelu innych języków programowania. Wyjątki są ważne i zapewniają lepszą kontrolę nad obsługą błędów.
Wyjaśnijmy tam nowe słowo kluczowe związane z wyjątkami.
Try- Funkcja używająca wyjątku powinna znajdować się w bloku „try”. Jeśli wyjątek nie zostanie wyzwolony, kod będzie kontynuowany normalnie. Jednak jeśli wyjątek zostanie wyzwolony, wyjątek zostanie „zgłoszony”.
Throw- W ten sposób wywołujesz wyjątek. Każdy „rzut” musi mieć co najmniej jeden „zaczep”.
Catch - Blok „catch” pobiera wyjątek i tworzy obiekt zawierający informacje o wyjątku.
Gdy zostanie zgłoszony wyjątek, kod następujący po instrukcji nie zostanie wykonany, a PHP spróbuje znaleźć pierwszy pasujący blok catch. Jeśli wyjątek nie zostanie przechwycony, zostanie wystawiony błąd krytyczny PHP z komunikatem „Niezłapany wyjątek ...
Wyjątek może zostać zgłoszony i przechwycony ("złapany") w PHP. Kod może być otoczony blokiem prób.
Każda próba musi mieć co najmniej jeden odpowiedni blok catch. Do przechwytywania różnych klas wyjątków można użyć wielu bloków catch.
Wyjątki mogą być rzucane (lub ponownie rzucane) w obrębie bloku catch.
Przykład
Poniżej znajduje się fragment kodu, skopiuj i wklej ten kod do pliku i sprawdź wynik.
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
// Code following an exception is not executed.
echo 'Never executed';
}catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
?>
W powyższym przykładzie funkcja $ e-> getMessage służy do uzyskania komunikatu o błędzie. Istnieją następujące funkcje, z których można korzystaćException klasa.
getMessage() - wiadomość o wyjątku
getCode() - kod wyjątku
getFile() - nazwa pliku źródłowego
getLine() - linia źródłowa
getTrace() - n tablica backtrace ()
getTraceAsString() - sformatowany ciąg śledzenia
Tworzenie niestandardowego programu obsługi wyjątków
Możesz zdefiniować własną niestandardową obsługę wyjątków. Użyj następującej funkcji, aby ustawić funkcję obsługi wyjątków zdefiniowaną przez użytkownika.
string set_exception_handler ( callback $exception_handler )
Tutaj exception_handlerto nazwa funkcji, która ma zostać wywołana, gdy wystąpi nieprzechwycony wyjątek. Tę funkcję należy zdefiniować przed wywołaniem set_exception_handler ().
Przykład
<?php
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>
Sprawdź pełny zestaw funkcji obsługi błędów w PHP Error Handling Functions