I've often settled for rather ugly solutions to fatal errors in PHP pages. Without exceptions attempting to find your controller to output some error template always seemed messy. Occasionally I've settled for a die() although I never enjoy it.
Working on some tiny project for Denzil I wangled together this little fellow, which I'm quite happy with. Once your controller has started any PHP error anywhere will get routed through your fatalError() function. So you can put array index errors and that sort of thing into a nice template. If the error is in the template code then restore_error_handler() stops the script from looping around forever.
Another nice thing is that you can call trigger_error() from anywhere and you have a pleasant fatals-only exceptions mechanism. I really should have thought of this a long time ago.
class Controller {
function Controller() {
set_error_handler(array(&$this, 'handleError'));
}
function handleError($type, $string, $file, $line, $vars) {
restore_error_handler();
$this->fatalError("$string in $file at $line"); // or something
}
function fatalError($msg) {
// output nice page with error msg
exit;
}
}
Comments
No comments yet.
Leave a comment