Chapter 6. Error Handling

Errors and error handling in PHP has remained pretty much unchanged since PHP 4, except for the additions of E_STRICT in PHP 5.0, E_RECOVERABLE_ERROR in PHP 5.2, and E_DEPRECATED in PHP 5.3.

Despite adding exceptions to PHP 5 and seeing limited application within PHP (e.g., ext/pdo and ext/spl), numerous attempts to replace traditional errors with them have failed. In PHP 7.0, this has finally changed, with the “Exceptions in the engine (for PHP7)” RFC.

Exceptions on Constructor Failure

Prior to PHP 7.0, if an internal class failed to instantiate properly, either a null or an unusable object was returned.

With PHP 7.0, all internal classes will throw an exception on __construct() failure. The type of exception will differ on the object being instantiated and the reason for failure—as shown in Example 6-1. If you pass in an argument of the incorrect type, a \TypeError is thrown (see “\TypeError”).

Example 6-1. Consistent constructor failure
try {
    new MessageFormatter('en_US', null);
} catch (\IntlException $e) {
    1
}
1

This will result in an \IntlException with the message Constructor failed.

Engine Exceptions

With PHP 7.0, almost all fatal errors and catchable fatal errors are now engine exceptions. This is possible because an uncaught exception still ...

Get Upgrading to PHP 7 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.