O lekcji
PHP oferuje dwa mechanizmy do obsługi problemów:
- Błędy (np. ostrzeżenia lub krytyczne błędy).
- Wyjątki (kontrolowany sposób obsługi błędów w kodzie).
Obsługa błędów
Błędy można obsługiwać, definiując niestandardowy handler za pomocą funkcji set_error_handler
.
Przykład: Niestandardowy handler błędów
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
echo "Błąd [$errno]: $errstr w $errfile w linii $errline.<br>";
}
set_error_handler("myErrorHandler");
// Wywołanie błędu
echo $undefined_variable;
?>
Obsługa wyjątków
Wyjątki (Exception
) to obiektowe podejście do obsługi błędów. Można je rzucać (throw
) i łapać (catch
) w celu kontrolowanego zarządzania błędami.
Rzucanie wyjątków
Wyjątki rzuca się za pomocą throw
. Zwykle używa się wbudowanej klasy Exception
lub własnych klas wyjątków.
Przykład: Rzucanie wyjątku
<?php
function podziel($a, $b) {
if ($b == 0) {
throw new Exception("Nie można dzielić przez zero.");
}
return $a / $b;
}
try {
echo podziel(10, 0);
} catch (Exception $e) {
echo "Wystąpił błąd: " . $e->getMessage();
}
Własne klasy wyjątków
Możesz tworzyć własne klasy wyjątków, aby obsługiwać specyficzne przypadki.
Przykład: Własna klasa wyjątku
<?php
class MojWyjatek extends Exception {
public function szczegolyBledu() {
return "Błąd w pliku " . $this->getFile() . " w linii " . $this->getLine();
}
}
try {
throw new MojWyjatek("To jest niestandardowy wyjątek.");
} catch (MojWyjatek $e) {
echo $e->getMessage() . "<br>";
echo $e->szczegolyBledu();
}
?>
Obsługa wielu wyjątków
Możesz obsłużyć różne typy wyjątków w jednym bloku try
.
Przykład: Obsługa wielu wyjątków
<?php
try {
throw new InvalidArgumentException("Nieprawidłowy argument.");
} catch (InvalidArgumentException $e) {
echo "InvalidArgumentException: " . $e->getMessage();
} catch (Exception $e) {
echo "Exception: " . $e->getMessage();
}
?>