De werking van de exception

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

16/11/2011 00:29:45
Quote Anchor link
Even een korte vraag.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
try {
    require("inc/config.inc.php");
    require("inc/core.inc.php");
    require("inc/functions.inc.php");
    echo "Spef!";
    
    if(isset($_GET['meukee']) {
        throw new Exception('Blaat');
    }

    echo "Snotbeuken!";

}
catch(Exception $e) {
    error_handler($e);
}

?>

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 -
 
PHP hulp

PHP hulp

22/12/2024 17:21:27
 
Wouter Lolz

Wouter Lolz

16/11/2011 00:36:09
Quote Anchor link
Volgens ben jij hier één van de slimste :o

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
 
- Ariën  -
Beheerder

- Ariën -

16/11/2011 00:40:16
Quote Anchor link
Kan het alleen even niet uittesten nu. Maar wou alleen even weten of mijn beredenering klopt :P.

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 -
 
Wouter Lolz

Wouter Lolz

16/11/2011 00:40:43
Quote Anchor link
Dan zou je denk
return error_handler();
moeten doen.

Oke :).
Gewijzigd op 16/11/2011 00:43:50 door Wouter Lolz
 
- Ariën  -
Beheerder

- Ariën -

16/11/2011 00:44:44
Quote Anchor link
Duidelijk dus, nu maar mijn bed op zoeken.
Enne, exceptions zijn gewoon tof....
Gewijzigd op 16/11/2011 00:47:29 door - Ariën -
 
TJVB tvb

TJVB tvb

16/11/2011 09:14:28
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

16/11/2011 09:42:14
Quote Anchor link
Wat ik zelf eens als experimentje gedaan heb is een nieuwe Error class gemaakt die de Exception class extend.

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.
 
- Ariën  -
Beheerder

- Ariën -

16/11/2011 09:47:47
Quote Anchor link
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.

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?
 
TJVB tvb

TJVB tvb

16/11/2011 09:59:41
Quote Anchor link
Ja, je krijgt dat iets als:

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

?>


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.
 



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.