Blog webdeveloperski Patryk yarpo Jar

Hierarchia klas wyjątków

Autor wiadomości Listopad 29, 2010

Mechanizm wyjątków, z grubsza, opisałem wcześniej. Wyjątek jest klasą, a (prawie) po każdej klasie można dziedziczyć. Po co dziedziczyć po wyjątkach? A no właśnie - tego się dowiesz za chwilę.

Dziedziczenie

Aby rozszerzyć (dziedziczyć) jakąś klasę używamy słowa kluczowego `extends':

class MyException extends Exception {}

Aby rzucić nasz własny wyjątek używamy składni:

throw new MyException('Treść komunikatu');

Wiele bloków catch

Skoro jest możliwość rzucenia wielu typów wyjątków, to i warto byłoby móc przechwycić różnego rodzaju wyjątki. Można:

try
{
    throw new MyException('testowy wyjątek');
}
catch(MyException $e)
{
    echo 'Przechwyciłem MyException';
}
catch(Exception $e)
{
    echo 'Przechwyciłem Exception';
}

Działa to podobnie do switcha. Podajemy klasę wyjątku i obsługę dla tego wyjątku. Gdyby zamienić kolejność w powyższym przykładzie, to przechwycony byłby wyjątek klasy Exception, ponieważ (dziedziczenie) wyjątek klasy `MyException' jest jednocześnie widziany jako wyjątek klasy Exception. Pseudomatematycznie można to zapisać: `MyException' > `Exception', czyli "rozszerza".

Po co?

Dzięki odpowiedniej hierarchii klas wyjątków możemy stworzyć różne wyjątki na różne niechciane, ale mogące się zdarzyć, sytuacje. A następnie w czytelny sposób je rozpoznać i obsłużyć:

try
{
    $oSys = new System();
    $oSys->work();
}
catch(NoFileException $e)
{
    echo 'Przechwyciłem NoFileException';
}
catch(PDOException $e)
{
    echo 'Przechwyciłem PDOException';
}
catch(ArrayException $e)
{
    echo 'Przechwyciłem ArrayException';
}
catch(Exception $e)
{
    echo 'Przechwyciłem Exception';
}

Zamiast echo w takim wypadku można użyć np. funkcji mail (lub obudowanej w klasę) wysyłając sobie na maila informację co się stało. Bardzo przydatna może być wtedy taka konstrukcja:

catch(Exception $e)
{
    mail('a@b.pl', 'błąd na stronie', var_export($e, true));
}

Funkcja `var_export' rozłoży nam na części pierwsze wszystkie informacje o wyjątku. Na maila dostaniemy rozpiskę co się stało, w której linii, jakiej funkcji, z jakimi parametrami.

Co dalej?

Zapraszam do lektury artykułu o walidacji danych w klasie wyjątku.

Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.