[PHP] Non-fatal Exception

Gestart doorRik8 reacties49 weergaven

9 berichten · pagina 1 van 1

Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Hiya,

Ik ben bezig met mijn systeem en loop tegen iets aan.
Ik heb 2 classes die beide Exceptions Extenden:

[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/class"]class[/URL] FatalError extends Exception [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] NonFatalError extends Exception [COLOR= #007700]{ }[/COLOR]

?>


De fatalError wordt opgevangen met aan het einde een die(), terwijl de NonFatalError dat niet doet.

Echter sluiten ze toch beide het script af confused
Codeblok (index.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


include(errorHandler.php);
include(fatalError.php);
include(nonFatalError.php);

define(DEV_MODE, TRUE);

errorhandler::initialize();

throw new nonFatalError(Deze error is niet fataal., 10);

echo
Daarom zie je deze tekst
;

throw new fatalError(Deze error is wel fataal., 10);

echo
Daarom zie je deze tekst nooit
;

?>

http://www.mysoftlogon.nl/MyBoard/
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Hoe ziet je NonFatalError() eruit?
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Zie PB. Wil het liefste niet zomaar mijn classes prijsgeven om bepaalde redenen emo
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Je gebruikt set_exception_handler() en daar staat als uitleg bij:
"Execution will stop after the exception_handler is called."

Je functie zelf werkt namelijk wel, dat zie je als je je throw new nonFatalError vervangt door dit:
errorHandler::errorIt(123, lalala, __FILE__, __LINE__, array());

t Is dus puur een eigenschap van de functie zelf waar je dus geen controle over hebt.

edit:
bekijk ook het voorbeeld op php.net:
[COLOR= #0000BB]<?php[/COLOR]
[COLOR= #007700]function[/COLOR] exception_handler[COLOR= #007700]([/COLOR][COLOR= #0000BB]$exception[/COLOR][COLOR= #007700]) {[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]"Uncaught exception: "[/COLOR] [COLOR= #007700],[/COLOR] [COLOR= #0000BB]$exception[/COLOR][COLOR= #007700]->[/COLOR]getMessage[COLOR= #007700](),[/COLOR] [COLOR= #DD0000]"n"[/COLOR][COLOR= #007700];
}[/COLOR]

set_exception_handler[COLOR= #007700]([/COLOR][COLOR= #DD0000]exception_handler[/COLOR][COLOR= #007700]);[/COLOR]

throw [COLOR= #007700]new[/COLOR] Exception[COLOR= #007700]([/COLOR][COLOR= #DD0000]Uncaught Exception[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]"Not Executedn"[/COLOR][COLOR= #007700];[/COLOR]
?>


Je zult nooit de melding "Not Executed" op je scherm krijgen.
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Damn.. Want om telkens zo een fout aan te roepen is natuurlijk ook best dubieus.... Maarja het zal wel moeten dan neem ik aan.
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Hoe bedoel je "om telkens zo een fout aan te roepen"?

PHP stopt altijd na een ongevangen exception, net zoals dat hij stopt na een syntax error en andere fatale fouten.
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
echo errorHandler::errorIt(10, Deze error is niet fataal., __FILE__, __LINE__, array());

t.o.v.

throw new nonFatalError(Deze error is niet fataal., 10);

Is toch weer een hoop meer typwerk.
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Maar die errorHandler::errorIt() handmatig aanroepen werkt ook niet.
set_exception_handler() zorgt alleen voor ongevangen exceptions, en dan stopt PHP gewoon altijd met uitvoeren, wat je erna ook aanroept.
Je hebt alleen de mogelijkheid om het foutmelding-bericht zelf nog wat aan te passen, maar de beslissing om het script te stoppen is al door PHP gemaakt en derhalve door jou niet meer terug te draaien.

Bij niet-fatale fouten die geen exceptions betreffen werkt het wel gewoon, als jij echo lalala; doet terwijl je geen constante lalala hebt dan krijg je gewoon de melding die je nonFatalError voor jou maakt.
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Achja, dan maar zo ombouwen dat non-fatal errors niet als exceptions afgehandeld worden.
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren