OOP poznámky II - vyjímky - Exception
Vydáno: 20.06.10 Kategorie:
V minulém díle jsem si sepsal naprosté základy OOP v PHP. Dnešní poznámky se vztahují k zachycování a práci s výjimkami (chybami) v PHP.
Základní pojmy Exception
throw new Exception($message, $errorno) – zaregistruj novou
výjimku (s textem $message, a číslem chyby $errorno)
try {
....
}
Blok kódu, ve kterém se hledá zaregistrovaná výjimka.
catch(Exception $e) {
echo "Tady bude výpis výjimky:" . $e;
}
Za try blokem následuje catch blok, který slouží k zachycení výjimky.
Vlastní výjimka – poděděná z Exception
class MySQLException extends Exception {
//žádná vlastní data, všechny poděděné od Exception
public function __construct($message, $errorno) {
//pokud je číslo chyby větší než 5000, pak to je chyba použití třídy, protože mysql má jen chyby do 5000
if($errorno >= 5000) {
$message = __CLASS__ . " - Chyba použití třídy! " . $message;
}
else {
$message = __CLASS__ . " - " . $message;
}
//nyní zavolám kontruktor rodiče Exception
parent::__construct($message, $errorno);
}
//kromě konstruktoru mohu v potomkovi změnit i metodu __toString(). Ostatní metody jsou typu final a nemohou být proto v potomkovi přepsány
public function __toString() {
return("Error: $this->code - $this->message");
}
}
try {
//zde někde může dojít k vyhození výjimky
}
//pokud v bloku try dojde k zaznamenání vyjímky (throw new MySQLExcerption($zprava, $chyba)), pak jí v catch zachyť a zobraz
catch(MySQLException $e)
{
echo "<h1>".$e."</h1>";
exit();
}
catch(Exception $e)
{
echo $e;
exit();
}
Zachycení výjimky ze třídy (MySQLException) musí být před rodičovskou (Exception), protože jinak by jí zachytil rodič a na potomka by se už nedostalo :D
Více o rodičovské třídě Exception na http://php.net/…xception.php