Re: PHP5 Exception Handling
| From: | Jochem Maas | Date: | Fri, 04 Feb 2005 18:26:17 +0000 |
| Subject: | Re: PHP5 Exception Handling | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-208100@lists.php.net to get a copy of this message | ||
Gerard Samuel wrote:
Just bouncing a thought on you. I currently have a default exception handler setup. So far in the code, I throw an exception when something is wrong. i.e. Missing file, invalid argument, failed db connection etc... My thought was centering around if I still needed to use try/catch in the code, since I have a default exception handler. Normally, I would rethrow exceptions for it to bubble back up to the top, where its caught, and something useful done with the stack. So I removed all try/catch blocks, and its seems to be working as it should be. Just wondering if there may be an "gotchas" with this chain of thought. Or should I keep the try/catch blocks as it is???I think you should leave them in. the idea behind the default exception handler is to catch uncaught exceptions - uncaught exceptions should be the exception rather than the rule. also you don't have to rethrow exceptions, sometimes its very useful to just catch (possibly ignore) and continue execution just past the catch block. http://be.php.net/manual/en/function.set-exception-handler.php <the gotcha> tha manual states that execution stops after the exception handler in called, which is fairly limiting. </the gotcha> Another way to look at it would be to specify that all 'pages' are based on the following: try { // global include // process some stuff // do output } catch (Exception $e) { // error - show 404 or something? } another thing about exceptions, you can be very specific about catching, also the catches can be 'stacked': try { } catch (DBException $e) { } catch (UnknownObject $e) { } catch (Exception $e) { } this implies that the code uses user defined Exception subclasses. i.e. you can write your own Exception classes that you can throw around :-)
Thanks