Hi

Ik zit een beetje met de vraag waar en wanneer ga ik exceptions opvangen. Ik ben bij deze vraag gekomen nu ik bezig ben aan een Database class. (met PDO)

Wanneer de verbinding met de database niet kan gemaakt worden, wordt er een exception gegooid. Leuk, maar waar en wanneer van je hem op? Ik zou eerder geneigd zijn om voor de GUI te gaan. Door specifiek die van de database te catchen zou ik dan naar de gebruiker toe kunnen melden dat er een fatale fout optrad.

Langs de andere kant, moeten fouten die optreden met de database zelf niet binnen de database class afgehandeld worden? Mijn constructor van mijn database class die ziet er als volgt uit:


<?php
    public function __construct(Log $log, Config $config) {
     //code
    }
?>


Nu begin mij echter sterk af te vragen of het wel verstandig is om dat al dan niet zo te doen. Graag jullie meningen!
Het 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:
<?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);
}
}
}
?>
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.

Reageren