Edit report at https://bugs.php.net/bug.php?id=60364&edit=1
ID: 60364 User updated by: zyss at mail dot zp dot ua Reported by: zyss at mail dot zp dot ua Summary: Implement ability to recover from fatal errors in eval()'d code Status: Open Type: Feature/Change Request Package: *General Issues Operating System: All PHP Version: 5.3.8 Block user comment: N Private report: N New Comment: > This could be solved more straight forward solved by making fatal errors an > Exception in PHP Yes, that would be ideal (this is how Java handles missing classes and methods and it works just fine). PHP borrowed from Java many features (classes, interfaces, "instanceof", ...), why not to implement one more useful thing â not to kill scripts when something is missing? Previous Comments: ------------------------------------------------------------------------ [2011-12-20 03:46:08] hanskrentel at yahoo dot de Why specific for eval and not include and/or overal? This could be solved more straight forward solved by making fatal errors an Exception in PHP, like suggested in #28331 (which names eval in a comment as a use-case). ------------------------------------------------------------------------ [2011-11-23 13:27:35] zyss at mail dot zp dot ua Description: ------------ Sometimes eval() is used as a way to execute PHP code within a shell (legal remote access for debugging purposes) or to execute code compiled to PHP from higher-level scripting language or the code stored in the database etc. The common problem is that a call of non-existing function (or object instantiation) results in termination of the whole script, not just eval'd code. I think that it's not correct in such cases. The obvious way to implement it would be adding flags to eval() function (as a second argument) one of which could indicate that eval() should not terminate the script but just return an error or raise an exception. Such flags could be: EVAL_FATAL_DIE // current behavior EVAL_FATAL_ERROR // return FALSE EVAL_FATAL_EXCEPTION // raise an exception of a predefined class (e.g. EvalException) Test script: --------------- try { eval('non_existing_function()', EVAL_FATAL_EXCEPTION); } catch (EvalException $e) { Logger::log('Error in eval\'d code', $e); } Expected result: ---------------- Exception being logged and script continued its execution. Actual result: -------------- Fatal error: Call to undefined function non_existing_function() in ... : eval()'d code(1) on line 1 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=60364&edit=1