Obsługa wyjątków w PHP

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3004 razy

Obsługa wyjątków w PHP za pomocą instrukcji try, catch wygląda następująco:

<?php $x = 0; try{ if(!$x) throw new Exception("Próbujesz obliczyć logarytm naturalny z zera"); $value = log($x); }catch(Exception $e){ echo("Błąd w linii: " . $e->getLine() . ": " . $e->getMessage()); } ?>

Wynik działania powyższego kodu:

Błąd w linii: 5: Próbujesz obliczyć logarytm naturalny z zera

Jak widać klasa Exception w PHP zajmuje się obsługą błędów, udostępniając opis błędu, miejsce jego wyrzucenia i parę innych rzeczy też. Oto konstrukcja klasy Exception:

Exception { // pola klasy protected string $message ; protected int $code ; protected string $file ; protected int $line ; // metody public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] ) final public string getMessage ( void ) // zwraca komunikat wyjątku (opis wyjątku) final public Exception getPrevious ( void ) final public mixed getCode ( void ) // kod błędu (domyślnie 0) final public string getFile ( void ) // zwraca nazwę pliku, w którym błąd wystąpił final public int getLine ( void ) // zwraca linię wyrzuconego wyjątku final public array getTrace ( void ) final public string getTraceAsString ( void ) public string __toString ( void ) final private void __clone ( void ) }

Kod wcześniej rzuconego wyjątku przeróbmy do następującej postaci:

<?php function ln($value){ if(!$value) throw new Exception("Próbujesz obliczyć logarytm naturalny z zera"); return log($value); } try{ $val1 = ln(10); echo("<p>" . $val1 . "</p>"); $val2 = ln(0); echo("<p>$val2</p>"); $val3 = ln(5); echo("<p>$val3</p>"); }catch(Exception $e){ echo("Błąd w linii: " . $e->getLine() . ": " . $e->getMessage()); } ?>

by zrozumieć, że linia kodu wywołania błędu zawsze będzie zwracana przez metodę getLine klasy Exception:

2.302585092994

Błąd w linii: 4: Próbujesz obliczyć logarytm naturalny z zera

Można też tworzyć własne klasy wyjątków, np. tak:

<?php class lnFromZeroException extends Exception{ public function __construct(){ parent::__construct("Próbujesz obliczyć logarytm naturalny z zera"); } } function ln($value){ if(!$value) throw new lnFromZeroException(); return log($value); } try{ $val1 = ln(10); echo("<p>" . $val1 . "</p>"); $val2 = ln(0); echo("<p>$val2</p>"); $val3 = ln(5); echo("<p>$val3</p>"); }catch(Exception $e){ echo("Błąd: " . $e->getLine() . ": " . $e->getMessage()); } ?>
Propozycje książek