Changes to error handling
-------------------------
-* The new base class of the exception hierarchy is BaseException, from which
- Exception extends. Typehints in exception handling code may need to be changed
- to account for this.
+* There are now two exception classes: Exception and Error. Both classes
+ implement a new interface Throwable. Type hints in exception handling code
+ may need to be changed to account for this.
-* Some fatal errors and recoverable fatal errors now throw an EngineException
- instead. As EngineException extends BaseException but not Exception, these
- exceptions will not caught by existing try/catch blocks.
+* Some fatal errors and recoverable fatal errors now throw an Error instead.
+ As Error is a separate class from Exception, these exceptions will not be
+ caught by existing try/catch blocks.
For the recoverable fatal errors which have been converted into an exception,
it is no longer possible to silently ignore the error from an error handler.
- In particular, it is no longer possible to ignore typehint failures.
+ In particular, it is no longer possible to ignore type hint failures.
-* Parser errors now generate a ParseException (extends BaseException). Error
+* Parser errors now generate a ParseError that extends Error. Error
handling for eval()s on potentially invalid code should be changed to catch
- ParseException in addition to the previous return value / error_get_last()
+ ParseError in addition to the previous return value / error_get_last()
based handling.
* Constructors of internal classes will now always throw an exception on
Relevant RFCs:
* https://wiki.php.net/rfc/engine_exceptions_for_php7
+* https://wiki.php.net/rfc/throwable-interface
* https://wiki.php.net/rfc/internal_constructor_behaviour
* https://wiki.php.net/rfc/reclassify_e_strict