HOME > PHP

Wyjątki i ich obsługa w PHP

Wyjątki to mechanizm w języku PHP, który umożliwia przechwytywanie i obsługę błędów w trakcie wykonywania programu. Wyjątki pozwalają na przerwanie normalnego przepływu programu i przekazanie sterowania do specjalnie napisanej funkcji obsługi wyjątków.

W PHP wyjątki obsługuje się za pomocą trzech elementów: klauzuli „try”, bloku „catch” oraz bloku „finally”. Struktura składniowa wygląda następująco:

try {
    // kod, który może rzucić wyjątek
} catch (Exception $e) {
    // obsługa wyjątku typu Exception
} catch (AnotherException $e) {
    // obsługa wyjątku typu AnotherException
} finally {
    // kod wykonywany zawsze po obsłudze wyjątku
}

W powyższym przykładzie klauzula „try” zawiera kod, który może rzucić wyjątek. Jeśli wyjątek zostanie rzucony, sterowanie przechodzi do bloku „catch”, który zawiera kod obsługi wyjątku. Jeśli w bloku „catch” nie zostanie zdefiniowany odpowiedni blok obsługi dla danego typu wyjątku, wyjątek zostanie przekazany dalej. Blok „finally” zawiera kod, który zawsze zostanie wykonany po obsłudze wyjątku, niezależnie od tego, czy wystąpił wyjątek czy nie.

W PHP dostępnych jest kilka wbudowanych klas wyjątków, takich jak Exception, RuntimeException, LogicException czy InvalidArgumentException. Można również definiować własne klasy wyjątków, dziedziczące po klasie Exception lub którejś z jej podklas.

Przykład rzucania i obsługi wyjątków w PHP:

class DivideByZeroException extends Exception {}

function divide($a, $b) {
    if ($b == 0) {
        throw new DivideByZeroException('Cannot divide by zero');
    }
    return $a / $b;
}

try {
    $result = divide(10, 0);
} catch (DivideByZeroException $e) {
    echo 'Caught exception: ', $e->getMessage(), "\n";
} finally {
    echo 'Finally block executed';
}

W powyższym przykładzie funkcja divide() rzuca wyjątek DivideByZeroException, gdy drugi argument jest równy zero. W bloku „catch” obsługujemy ten wyjątek i wyświetlamy komunikat. W bloku „finally” wyświetlamy informację o wykonaniu bloku „finally”.

Podobne artykuły