Stronę tą wyświetlono już: 3209 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 zeraMoż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());
}
?>