I was having a conversation with a buddy of mine the other day and we got on the topic of PHP not having a very standardized error system. Now that he’s working with Python the mix of errors and exceptions in PHP is an apparent shortcoming. PHP is funny like that, out of the box some times are just terrible, but they also give you the means to correct the situation so you can have the functionality as so desired.
To convert all of your errors into exceptions, you need to use the function set_error_handler()
and define your own custom error handling function. Inside that function, just take the error message and throw the exception as you see fit:
set_error_handler('customErrorHandler'
function customErrorHandler($errno, $errstr, $errfile, $errline, array $errcontext)
{
// Handles @ error suppression
if (error_reporting === 0)
{
return false
}
throw new Exception($errstr, 0, $errno, $errfile, $errline
}
Really not much to it! Now when an error is encountered (and the @
suppression is not being used) the error will be thrown as an exception while retaining all of the pertinent information about the error.
It’s debatable whether or not this is a good practice or not, but it does provide you with a very consistent way to interact with PHP errors. Of course, if you wanted to you could add in additional logic to the error handler function, like say perhaps sending an email every time an error is encountered (because we always test our code and there should be no bugs in production, right? 😉