[oop] wanneer sprake van exception?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

26/11/2013 22:11:12
Quote Anchor link
Ola,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
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.
 
PHP hulp

PHP hulp

27/11/2024 19:20:21
 
Wouter J

Wouter J

26/11/2013 22:43:21
Quote Anchor link
Ja, exceptions kunnen perfect dienen als if/else structuur (al is het omschrijven van PHP functies om exceptions te gebruiken echt doelloos imo).

Zoiets zie je ook in mijn code van gister: http://www.phphulp.nl/php/forum/topic/hoeveel-errorlevels/93065/2/#666787 (regel 60 - 70)
 
Ozzie PHP

Ozzie PHP

26/11/2013 22:50:50
Quote Anchor link
Wouter, dankjewel voor het meedenken. Laten we dan bijvoorbeeld het inladen van een cache-bestand nemen. Mijn functie geeft nu OF de data terug, OF hij geeft null terug als het cachebestand niet bestaat.

In mijn code doe ik dan dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

if (is_null($foo = $cacher->load('foo')) {
  // foo bestaat niet, dus we gaan foo inladen
}

?>


Dit zou je dus ook met exceptions kunnen doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
 
?>

Heeft een van beide manieren jouw voorkeur (zo ja waarom), of maakt het jou niet uit?
 
Wouter J

Wouter J

26/11/2013 22:55:29
Quote Anchor link
zucht.. heb je mijn voorbeeldje bekeken?
 
Ozzie PHP

Ozzie PHP

26/11/2013 22:56:35
Quote Anchor link
>> zucht.. heb je mijn voorbeeldje bekeken?

Ja? Zo kwam ik bij het cacher voorbeeld.
 
Wouter J

Wouter J

27/11/2013 16:49:14
Quote Anchor link
Nou, dan zag je ook dat jouw 2e voorbeeldje exact in mijn code staat :)
 
Ozzie PHP

Ozzie PHP

27/11/2013 16:53:03
Quote Anchor link
Ja, klopt :)

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?
 
Wouter J

Wouter J

27/11/2013 16:59:21
Quote Anchor link
ik doe het zelf ook zo
 
Ozzie PHP

Ozzie PHP

27/11/2013 17:01:54
Quote Anchor link
allright, thanks ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.