De werking van de exception
Code (php)
Stel dat die exception wordt aangeroepen, vinden die requires() dan ook nog plaats? Alles toch NA een exception vindt toch niet plaats. Dus 'Snotbeuken' zal toch niet meer worden getoond, en 'Spef' juist wel?
Klopt dit?
Gewijzigd op 16/11/2011 00:30:00 door - Ariën -
Volgens mij werkt het het zelfde als een return, dus daarna word dan niet meer weergegeven.
Als ik niet op me mobiel had gezeten had ik het ff voor je verder uitgezocht :x
Toevoeging op 16/11/2011 00:39:32:
Nevermind:
http://www.php.net/manual/en/language.exceptions.php#104791
Quote:
When an exception is thrown, code following the statement will not be executed.
Juist jah... Wordt dus niet uitgevoerd,
Gewijzigd op 16/11/2011 00:42:41 door - Ariën -
return error_handler();
moeten doen.
Oke :).
Gewijzigd op 16/11/2011 00:43:50 door Wouter Lolz
Enne, exceptions zijn gewoon tof....
Gewijzigd op 16/11/2011 00:47:29 door - Ariën -
Maar een exception zorgt er inderdaad voor dat de code in de try/catch die daarop volgt niet wordt uitgevoerd. Maar deze wijzigt niet wat daarvoor gebeurd is.
Exceptions zijn zeker tof, helemaal als je met verschillende exceptions gaat werken.
En je kunt ook een custom exception handler maken voor alles wat je vergeet af te vangen.
Ik kon dan mijn eigen error gooien (throwen) met extra parameters. In mijn eigen class ving ik die parameters af en kon ik bijvoorbeeld een unieke view tonen.
Bijv. als er geen connectie met de database kan worden gemaakt, dan deed ik zoiets:
throw new Error('Er is een probleem met de database.', 'database');
De parameter 'database' zorgde er dan bijvoorbeeld voor dat er een icoontje van een database naast de foutmelding werd getoond.
Let wel dat je Exceptions alleen moet throwen op het moment dat het systeem "niet meer verder kan". Stel dat iemand ergens een numerieke waarde moet invullen, maar hij vult in plaats daarvan letters in, dan ga je dus geen Exception throwen, maar gewoon een normale foutmelding tonen waarin staat dat de bezoeker cijfers moet invullen.
TJVB tvb op 16/11/2011 09:14:28:
Deze code testen wordt wel lastig, je mist een ) op regel 8 ;)
Maar een exception zorgt er inderdaad voor dat de code in de try/catch die daarop volgt niet wordt uitgevoerd. Maar deze wijzigt niet wat daarvoor gebeurd is.
Exceptions zijn zeker tof, helemaal als je met verschillende exceptions gaat werken.
En je kunt ook een custom exception handler maken voor alles wat je vergeet af te vangen.
Maar een exception zorgt er inderdaad voor dat de code in de try/catch die daarop volgt niet wordt uitgevoerd. Maar deze wijzigt niet wat daarvoor gebeurd is.
Exceptions zijn zeker tof, helemaal als je met verschillende exceptions gaat werken.
En je kunt ook een custom exception handler maken voor alles wat je vergeet af te vangen.
Hehe ging om het snelle voorbeeld.
Als je meer exceptionhandlers hebt, dan kan je toch meerde 'catch' blokken onder elkaar zetten, zonder complete try-catchblokken in elkaar te nesten?
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
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
try
{
echo 'doe iets';
$result = mmysql_query('Select a,b from tabel WHERE c=3');
if($result === FALSE)
{
throw new DataBaseException(mysql_error());
}
$file = '/path/to/file.extension';
$info = file_get_contents($file);
if($info === FALSE)
{
throw new FileException('Failed to open '.$file);
}
if(strlen($info) == 0)
{
throw new NoContentException('No content in '.$file);
}
} catch(DataBaseException $e)
{
echo 'Er ging iets fout met de database, probeer het later nog eens';
}
catch(FileException $e)
{
echo $e->getMessage();
}
?>
try
{
echo 'doe iets';
$result = mmysql_query('Select a,b from tabel WHERE c=3');
if($result === FALSE)
{
throw new DataBaseException(mysql_error());
}
$file = '/path/to/file.extension';
$info = file_get_contents($file);
if($info === FALSE)
{
throw new FileException('Failed to open '.$file);
}
if(strlen($info) == 0)
{
throw new NoContentException('No content in '.$file);
}
} catch(DataBaseException $e)
{
echo 'Er ging iets fout met de database, probeer het later nog eens';
}
catch(FileException $e)
{
echo $e->getMessage();
}
?>
Als de query fout gaat kom je in de eerste catch, gaat er iets fout met het lezen van het bestand dan kom je in de 2e catch.
Is het bestand leeg dan komt er ook een exception die hier niet afgevangen wordt.