Re: exceptions instead of errors

From: Date: Sun, 04 May 2003 19:48:25 +0000
Subject: Re: exceptions instead of errors
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-1244@lists.php.net to get a copy of this message
Just a note that I'd really like to see this. One of the great things about exceptions will be: try { $m = mysql_connect("localhost", "user", "pass"); $sth = mysql_query("select bar from foo", $m); while ($row = mysql_fetch_array($sth)) { echo $row[0]; } mysql_close($m); } catch (exception $e) { echo $e->getMessage(); } This allows you to remove all the nasty if ($conn) could, and move your error handling into a singular place. I *really* would like this for internal functions. We could also make a new type of exception "internalexception," which a user has to specifically catch. This way unless you explictly specify that you want to catch an internalexception, it will default to just outputting an error message. -Sterling On Sat, 2003-05-03 at 20:53, Marcus Börger wrote: > The following patch: > http://marcus-boerger.de/php/ext/exception.diff > > allows in a short, straight forward and easy way to suppress errors and > optionally throw exceptions instead. This is supposed to be automated > by the try opcode (but that is another discussion). > > The problem: > During development of SQLite i found the problem that i had to inform > the user about an error inside a constructor. This can only be done by > throwing an exception. (Repeat: this cannot be done otherwise). The > main problem herin is that we have many little utility functions that may > raise errors (like safe mode and such). > > This means we had to rewrite the whole api, pass information around > or find a generic solution. > > Ok here goes: > > First i fixed the "ignore repeated errors" feature. Then i added some control > information to struct _php_core_globals: > error_handling_t error_handling; > zend_class_entry *exception_class; > > error_handling can be one of EH_NORMAL, EH_SUPPRESS and EH_THROW > - EH_NORMAL is the normal way errors are handled > - EH_SUPPRESS means the error is stored but not shown (suppressed even) > - EH_THROW throws an exception of type PG(exception_class) or the default > exception class if PG(exception_class) is NULL. > > To manually change the mode or class there is the following function: > PHPAPI void php_set_error_handling(error_handling_t > error_handling, zend_class_entry *exception_class TSRMLS_DC) > > The mechanism itself is located in the function php_error_cb which is called > during all error calls. So every error, warning or notice is catched. BUT of > corse the mechanism doesn't work with E_ERROR, E_PARSE or such. These > are real errors and are errors even after the patch. > > The reason the exception class can be set is to easily support exception > inheritance > for the lazy programmers. > > The reason to support EH_SUPPRESS is for more sophisticated problems... > > When the mechanismn throws an error it automatically sets these exception > properties: > - message the error message > - file the filename > - line the line number in the file > > Further more i suggest we add the severity to the default exception. > > Some help of the engine would be good: > - automatically set EH_THROW mode at "try" > - automatically set EH_NORMAL mode at "catch" (first outmost catch) > > If noone objects i will commit this on monday evening. > > Unfortunately there is a memory leak in the exception handling itself but > that is another story...and will hopefully soon be fixed by somebody else. > > Anybody interested can try the patch with my patched SQLite: > http://marcus-boerger.de/html/php/ext/sqlite/ > and especially look into test sqlite_oo_020.phpt > > regards > marcus > > > -- > ------------------->>> mailto:mail@marcus-boerger.de > <<<------------------ > "We are animals among animals, all children of matter, > save that we are the more disarmed. But since, unlike animals, > we know that we must die, let us prepare for that moment > by enjoying the life that has been given us by chance and for chance." > Umberto Eco, The island of the day before > --------------------->>> http://marcus-boerger.de > <<<--------------------- -- "The computer programmer is a creator of universes for which he alone is responsible. Universes of virtually unlimited complexity can be created in the form of computer programs." - Joseph Weizenbaum

« previous php.internals (#1244) next »