Wyjątki

Artykuł opisujący obsługę wyjątków w PHP5 - jak przechwytywać i obsługiwać, oraz jak rzucać własne wyjątki w kodzie obiektowym

PHP5 wprowadziło bardzo skuteczny a zarazem prosty sposób obsługi błędów dla klas - wyjątki oraz pomocną klasę Exception. Gdy PHP generuje wyjątek przechwytuje go kopia klasy Exception lub inna klasa potomna. Za pomocą klasy Exception możemy dowiedzieć się co i gdzie nie działa w naszym skrypcie. Wyjątki generują klasy PHP5, można je też generować samemu:
<?php
class klasa
{
public function __construct($liczba1, $liczba2)
	{
	IF(!is_numeric($liczba1) or !is_numeric($liczba2))
		{
		throw new Exception('Podane parametry to nie liczby');
		}
	$this->liczba1 = $liczba1;
	$this->liczba2 = $liczba2;
	}
public function dodaj()
	{
	return $this->liczba1+$this->liczba2;
	}
public function dziel()
	{
	IF($this->liczba2 == 0)
		{
		throw new Exception('Nie można dzielić przez zero');
		}
	return $this->liczba1/$this->liczba2;
	}
}

// stosujemy klasę
try
	{
	$kl = new klasa(2, 'c');
	echo $kl->dziel();
	}
catch (Exception $error)
	{
	echo '<b><u>MAMY PROBLEM</u></b><br />';
	echo '<b>Komunikat</b>: '.$error->getMessage().'<br /><b>Plik</b>: '.$error->getFile().'<br /><b>Wiersz</b>: '.$error->getLine();
	}
Mamy prostą klasę pobierającą jako argumenty dwie liczby. Jeżeli parametry nie są liczbami to wygenerowany (wyrzucony) zostanie wyjątek poprzez:
throw new Exception('Komunikat wyjątku');
Kolejny element to przechwytywanie wyjątków. Wywołanie klasy i jej metod ($kl = new klasa(2, 'c'); i echo $kl->dziel();) umieściliśmy w bloku try, po którym mamy blok catch. Jeżeli kod zawarty w try wygeneruje wyjątek to wykonany zostanie kod z bloku catch. $error to zmienna przechowująca obiekt klasy exception posiadającej metody:
  • getMessage() - tekstowy opis błędu
  • getCode() - liczbowy kod błędu
  • getFile() - nazwa pliku, w którym wystąpił błąd
  • getLine() - wiersz, w którym wystąpił błąd
  • getTraceAsString() - dane z funkcji debug_print_backtrace()
Wykonując podany na początku kod ujrzymy:
MAMY PROBLEM
Komunikat: Podane parametry to nie liczby
Plik: /var/www/localhost/htdocs/html/1.php
Wiersz: 8

Odnośnie klas potomnych względem Exception - klasy PHP5 generują własne wyjątki, np. SQLite, DOM, SimpleXML itd.:
<?php

try
	{
	$sqlite = new SqliteDatabase('nieistniejący_katalog/baza');
	}
catch (SQLiteException $error)
	{
	echo $error->getMessage();
	}
SQLiteDatabase::__construct() [function.SQLiteDatabase---construct]: unable to open database: /var/www/localhost/htdocs/html/nieistniejący_katalog/baza
Szczegółowe dane są dostępne w dokumentacji danego rozszerzenia.
blog comments powered by Disqus

Kategorie

Strony