Ola peepz,

Ik zit de laatste dagen wat te stoeien met exceptions, en ik vraag me nu af hoe jullie exceptions gebruiken. Gebruik je exceptions vooral om onverwachte gebeurtenissen op te vangen, of gebruik je ze ook als vervanging van if/else? Met dat laatste bedoel ik dit:

Zelf zou ik normaal gesproken dit doen:

<?php
if ($this->foo() === true) {
$this->bar();
} else {
$this->foobar();
}
?>
Nu zeggen een aantal van jullie dat het goed is om exceptions in je flow op te nemen. Is het dan de bedoeling dat je dit gaat doen?

<?php
try {
$this->foo();
$this->bar();
} catch (FooException $e) {
$this->foobar();
}
?>
Wat is nu in essentie het doel van Exceptions? Onverwachte dingen afhandelen (een database die gene verbinding kan maken, een bestand dat niet kan worden weggeschreven, een mailserver die plat ligt) of is het een moderne variant van if/else?
Ja, dat wisten we al, "eval is evil", alleen vroeg ik me af: wáárom zou je \Exception extenden als dat al is gedaan in de SPL Exceptions?
Zoals ik zei... Wouters voorbeeld was een afgeleide van mijn voorbeeld waarbij ik een FooException en een BarException had gebruikt.
Wouter wilde de output tonen door een link te geven naar een werkend op 3v4l.org

De code die Ozzie had gegeven is dit:
<?php

try {
throw new FooException('foo');
} catch (FooException $e) {
throw new BarException('bar');
} catch (BarException $e) {
echo 'hallo!';
}
?>

Als je dat draait bestaan er 2 classes niet en krijg je een error. Dat wilde wouter niet. Dus maakte hij (op een minder saaie manier) de classes aan. Hij wilde het werkend krijgen, dus Exception extenden is het makkelijkst. Het is ook nog eens pseudo code, dus waarom zou je SPL Exceptions er bij gaan betrekken?

<?php

// begin code die nodig is om het voorbeeld te laten werken en er voor de rest totaal niet toe doet

class FooException extends Exception {}
class BarException extends Exception {}

// eind code die nodig is om het voorbeeld te laten werken en er voor de rest totaal niet toe doet

// begin code waar het om ging

try {
throw new FooException('foo');
} catch (FooException $e) {
throw new BarException('bar');
} catch (BarException $e) {
echo 'hallo!';
}

// eind code waar het om ging

?>

Vind je het nu nog nodig om SPL Exceptions te gebruiken bij een boorbeeld? Zolang jij niet aangeeft in welke context je de vraag stelt neem ik aan dan het in de huidige context gevraagt wordt: een voorbeeld dat de een klein geïsoleerd gedrag duidelijk maakt. Niet een voorbeeld dat best practices demonstreert wat beginners zouden moeten volgen.

Is dat een goede reden waarom \Exception extenden in die context net zo goed is als SPL Exceptions classes extenden?
Pfff... wat een ophef :)

Ik zal voortaan wel weer gewoon basic PHP gaan gebruiken :P
>> Ik zal voortaan wel weer gewoon basic PHP gaan gebruiken :P

Hehe, lol :)

Reageren