PHP 7 changes how most errors are reported by PHP. Instead of reporting errors through the traditional error reporting mechanism used by PHP 5, most errors are now reported by throwingError exceptions.
As with normal exceptions, theseError exceptions will bubble up until they reach the first matchingcatch block. If there are no matching blocks, then any default exception handler installed withset_exception_handler() will be called, and if there is no default exception handler, then the exception will be converted to a fatal error and will be handled like a traditional error.
As theError hierarchy does not inherit fromException, code that usescatch (Exception $e) { ... } blocks to handle uncaught exceptions in PHP 5 will find that theseErrors are not caught by these blocks. Either acatch (Error $e) { ... } block or aset_exception_handler() handler is required.
You can catch both exceptions and errors by catching(Throwable)Throwable does not work on PHP 5.x.To catch both exceptions and errors in PHP 5.x and 7, add a catch block for Exception AFTER catching Throwable first.Once PHP 5.x support is no longer needed, the block catching Exception can be removed.try{ // Code that may throw an Exception or Error.}catch (Throwable $t){ // Executed only in PHP 7, will not match in PHP 5}catch (Exception $e){ // Executed only in PHP 5, will not be reached in PHP 7}<?phpset_error_handler(function(int $number,string $message) { echo"Handler captured error$number: '$message'".PHP_EOL;});try { echo$x;# notice, handled on callablepg_exec(null,null);# warning, handled on callablefho();# fatal error, stop running and catched} catch (Throwable $e) { echo"Captured Throwable: ".$e->getMessage() .PHP_EOL;}?>set_error_handler will also works without try and catchAn excellent blog post on the difference between exceptions, throwables and how PHP 7 handles these can be found here:https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/php 7.1try { // Code that may throw an Exception or ArithmeticError.} catch (ArithmeticError | Exception $e) { // pass}