php8: Throwable和Exception的区别

一,php8中的一些错误如致命错误用Exception捕捉不到

例子:

<?php
        try {
            echo "try";
            $a = 100/0;
            var_dump($a);
        }catch (\Exception $e){
            echo "catch";
            $result = $e->getMessage();
        }
?>

效果:

可以看到发生致命错误Fatal error时,
Exception未能捕捉到发生的异常

 

二,php8中用Throwable可以捕捉到致命错误

PHP8引入了一种新的错误处理机制,称为“Fatal errors to exceptions”(FTE)。
它将之前的致命错误(Fatal Error)转化为可捕获的异常,
使得我们能够更好地处理和追踪错误,提高代码的可靠性和性能。
在 PHP8.0 中,所有的内置异常都实现了 Throwable 接口。
这些内置异常包括除 ArithmeticError 之外的 Error 类型,以及 RuntimeException 和其衍生版本。
另一个重要的方面是,Throwable 增加了对非异常类型错误的支持。
它允许程序员在 catch 块中处理致命错误和错误的警告,即使这些错误不能被完全恢复

代码:

<?php

        try {
            echo "try<br/>";
            $a = 100/0;
            var_dump($a);
        }catch (Throwable $e){
            echo "catch";
            $result = $e->getMessage();
        }

?>

效果:

 

posted @ 2024-10-16 10:33  刘宏缔的架构森林  阅读(95)  评论(0编辑  收藏  举报