14.1 Exception throwen en catchen (try-catch)
Exceptions afhandelen werkt in PHP net zoals in andere talen met een try catch blok:
PHP-code:
<?php
function deel($a, $b)
{
if ($b == 0)
throw new Exception('Deling door nul');
else
return $a / $b;
}
try
{
echo deel(5, 0);
}
catch (Exception $e)
{
echo $e->getMessage();
}
?>
Het is beter de oude exception verder te throwen dan en een nieuwe exception te maken, de stacktrace gaat dan verloren en maakt het debuggen een stuk moeilijker.
In PHP kunnen we ook fouten onderdrukken door er een @ voor te plaatsen, deze method is error-supression en niet error-handling! De fout dient nog altijd afgehandeld te worden op een andere plaats! (voorbeeld bij Databases)
14.2 Exceptions definieren
In PHP kan je je eigen exceptions definieren, dit doe je door een klasse aan te maken en de klasse Exception te extenden.
PHP-code:
<?php
class mijnException extends Exception
{
public function __construct($bericht, $code = 0)
{
parent::__construct($bericht, $code);
}
public function doeIets()
{
//hier kan je iets extra doen
}
}
?>
PHP-code:
<?php
throw new mijnException(‘Deling door nul’, 10);
?>
Met de set_exception_handler() functie kunnen we in PHP een catch-all functie opgeven die aangeroepen word iedere keer er een exception optreedt die niet opgevangen wordt. Je kan deze functie gebruiken om de exception nog op te vangen, de fout herstellen gaat niet meer. De exception is nog steeds fatal en alle code na de exception(handler) wordt niet meer uitgevoerd.
PHP-code:
<?php
function handleAllException($e)
{
echo $e->getMessage();
}
set_exception_handler("handleAllException");
throw new exception('Dit wordt nog wel afgedrukt');
echo 'Dit wordt nooit afgedrukt';
?>
Er is ook een set_error_handler() beschikbaar voor PHP errors.
Meer info: Extending Exceptions
Geschreven door: Martijn Croonen.
Kleine aanpassingen door: Aerts Kurt.