[oop] wanneer sprake van exception?
Ik was even met iemand anders op het forum in gesprek over exceptions. Nu vertelde hij dat hij een functie file_exists gebruikt die niet true of false teruggeeft, maar een Exception gooit als het bestand niet bestaat. Zoiets als dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
public function file_exists($file) {
if (!file_exists($file)) throw new Exception('File ' . $file . ' does not exist.');
}
?>
public function file_exists($file) {
if (!file_exists($file)) throw new Exception('File ' . $file . ' does not exist.');
}
?>
Van de ene kant is het wel handig, want je kunt dan zoiets doen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
try {
$this->filesystem->file_exists('foo.php');
} catch (FilesystemException $e) {
// file bestaat niet, onderneem actie
}
?>
try {
$this->filesystem->file_exists('foo.php');
} catch (FilesystemException $e) {
// file bestaat niet, onderneem actie
}
?>
Nu vraag ik me af of jullie ook exceptions op deze manier gebruiken. Zelf ben ik gewend om gewoon een true of false te returnen. Ik ben benieuwd of er meer mensen zijn die exceptions gebruiken in plaats van true of false te returnen.
Zoiets zie je ook in mijn code van gister: http://www.phphulp.nl/php/forum/topic/hoeveel-errorlevels/93065/2/#666787 (regel 60 - 70)
In mijn code doe ik dan dit:
Code (php)
Dit zou je dus ook met exceptions kunnen doen:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
try {
$foo = $cacher->load('foo');
} catch (CacherException $e) {
// foo bestaat niet, dus we gaan foo inladen
}
?>
try {
$foo = $cacher->load('foo');
} catch (CacherException $e) {
// foo bestaat niet, dus we gaan foo inladen
}
?>
Heeft een van beide manieren jouw voorkeur (zo ja waarom), of maakt het jou niet uit?
zucht.. heb je mijn voorbeeldje bekeken?
Ja? Zo kwam ik bij het cacher voorbeeld.
Nou, dan zag je ook dat jouw 2e voorbeeldje exact in mijn code staat :)
Wat ik alleen niet weet is of dit gewoon zomaar een voorbeeldje voor mij was, of dat het ook echt jouw eigen voorkeur is en je het zelf ook op deze manier doet?
ik doe het zelf ook zo
allright, thanks ;)