set_exception_handler() Must Update Its Type To Throwable

Until PHP 7.0, all thrown issues were children of the Exception class. In PHP 7.0, all issues are children of Throwable. Exception is not only one of two classes implementing it, along with Error.

To keep compatibility, it is important to switch types.

PHP code

<?php

// PHP 5.6- typed with Exception
class foo {
    static function bar(\Exception $e) {
        print $e->getMessage();
    }
}

set_exception_handler([Foo::class, 'bar']);

// Produces an error
1 / 0;

?>

Before

PHP Warning:  Division by zero

Warning: Division by zero

After

PHP Fatal error:  Uncaught TypeError: foo::bar(): Argument #1 ($e) must be of type Exception, DivisionByZeroError given

PHP version change

This behavior changed in 8.0

Error Messages