|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2004-05-05 23:47 UTC] arnoud at rattink dot com
Description:
------------
The code below prints GRRRRRRRR. This is incorrect as the
throwing of the exception is supposed to bring us
immediately to the catchblock. It is also inconsistent,
since I can replace the eval with just
$f = AAAAAARRRRRRRRG();
and then it skips the echo.
Reproduce code:
---------------
<?
function AAAAAARRRRRRG(){
throw new Exception("AAAAAARRRRRRG");
}
try {
eval('$f = AAAAAARRRRRRG();');
echo "GRRRRRRRR\n";
}
catch(Exception $e) {
echo "Exception caught nice and clean\n";
}
?>
Expected result:
----------------
I do not expect to see GRRRRRRRR.
Actual result:
--------------
GRRRRRRRR
Exception caught nice and clean
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 05:00:01 2025 UTC |
hello, i dont think this is a bug. i believe the line after eval gets executed by default. i think everything in the try{} block is supposed to get executed, and then the catch{} block is called...hello, i dont think this is a bug. i believe the line after eval gets executed by default. i think everything in the try{} block is supposed to get executed, and then the catch{} block is called...That is not true. Example: <? function f() { throw new Exception("I am an exception"); } try { $v = f(); echo "This is not supposed to get printed\n"; } catch(Exception $e) { echo "caught exception\n"; } ?> This just prints 'caught exception'. That is entirely correct. Now if you were right, then the above code should execute both echos. It does not, so is that a bug? I say it's a catch 22. Either this program, or the one with the 'eval' works out wrong. Personally I believe the whole idea of 'throwing an exception' is that you bypass all intermediate code and land straight into the 'catch' block. At least, that's how it works in C++ and Java.Don't think it's a bug... just read the following not in PHP.NET eval manual: "If there is a parse error in the evaluated code, eval() returns FALSE and execution of the following code continues normally." What about this code (?!): --------------------------- if ( eval('$f = AAAAAARRRRRRG();') ) { echo "GRRRRRRRR\n"; } --------------------------- Or this one: --------------------------- if ( !eval('$f = AAAAAARRRRRRG();') ) { // parse error } echo "GRRRRRRRR\n"; } ---------------------------