首页 > 解决方案 > 异常不被识别为一个类并且不被捕获

问题描述

我对 PHP 编程相当陌生,我正在尝试在我的代码中实现一些非常基本的异常处理。但是,似乎“异常”根本没有被识别为一个类,因此没有捕获到异常。

这是一个基本的代码示例,对我不起作用:

<?php
try
{
    $x = 0; 
    $y = 1;

    $z = $y / $x;
}
catch (Exception $e)
{ 
    echo "Hello World!"; 
}
?>

当我运行此代码时,我收到以下消息,而不是预期的“Hello World!”:

警告:第 7 行 C:\myFolder\testCase.php 中除以零

到目前为止我尝试了什么:

如果我使用“throw”关键字,它会跳转到 catch 块就好了。但它应该会自动捕获除零之类的异常,而无需我抛出一个,对吗?至少这是我从网上搜索收集到的(其他编程语言也是如此)。

我也考虑过使用set_exception_handler,但我不知道如何以这种方式获取特定的异常信息,因为我不能使用Exception->getMessage(). 唯一的方法是 - 再次 - 手动抛出每个异常。

为了使 catch 块捕获所有抛出的异常,我必须做什么?

如果重要的话:我使用的是 PHP 7.3.0 版。

标签: phpexception

解决方案


您需要用来set_error_handler捕获错误/警告/通知等...

这是一个例子:

// PHP Errors to Exceptions.
set_error_handler(function (
          $err_severity,
          $err_msg,
          $err_file,
          $err_line,
    array $err_context
) {
    // error was suppressed with the @-operator
    if (0 === error_reporting()) {
        return false;
    }
    switch ($err_severity) {
        case E_WARNING:
            throw new Exception(
                $err_msg,
                0,
                $err_severity,
                $err_file,
                $err_line
            );
    }
});

推荐阅读