Waar en wanneer Exceptions afhandelen?
Wouter J
07/05/2013 15:05:06Het niet kunnen connecten met een database is typisch zo'n exception die je laat opborrelen en vervolgens met een exception handler aan het eind opvangt.
En je catch hem dan kun je beslissen wat je wilt gaan doen. Je kan een nieuwe exception gooien, of je logt hem of je doet er niks mee. Voorbeeldje van een RouteLoader:
Hij vangt alle exceptions op die ontstaan bij het loaden van een bestand. Vervolgens maakt hij een nieuwe exception die duidelijk maakt dat er iets verkeerd is met het laden. Tevens bind je de vorige exception aan de nieuwe.
En je catch hem dan kun je beslissen wat je wilt gaan doen. Je kan een nieuwe exception gooien, of je logt hem of je doet er niks mee. Voorbeeldje van een RouteLoader:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
namespace DS\Framework\Routing\Loader;
use DS\Framework\Config\Loader\LoaderInterface;
use DS\Framework\Config\Exception\FileNotFound;
class RouteLoader implements LoaderInterface
{
public function load($filename)
{
try {
if (file_exists($filename)) {
throw new FileNotFoundException($filename);
}
$content = file_get_contents($filename);
$routes = $this->parser->parse($content); // gooit een exception als de syntax verkeerd is
} catch (\Exception $e) {
throw new LoaderException(sprintf('Unable to load "%s"', $filename), 0, $e);
}
}
}
?>
namespace DS\Framework\Routing\Loader;
use DS\Framework\Config\Loader\LoaderInterface;
use DS\Framework\Config\Exception\FileNotFound;
class RouteLoader implements LoaderInterface
{
public function load($filename)
{
try {
if (file_exists($filename)) {
throw new FileNotFoundException($filename);
}
$content = file_get_contents($filename);
$routes = $this->parser->parse($content); // gooit een exception als de syntax verkeerd is
} catch (\Exception $e) {
throw new LoaderException(sprintf('Unable to load "%s"', $filename), 0, $e);
}
}
}
?>
Hij vangt alle exceptions op die ontstaan bij het loaden van een bestand. Vervolgens maakt hij een nieuwe exception die duidelijk maakt dat er iets verkeerd is met het laden. Tevens bind je de vorige exception aan de nieuwe.