异常不会被识别为类,也不会被捕获

时间:2019-01-18 14:50:42

标签: php exception

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

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

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

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

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

  

警告:在第7行的C:\ myFolder \ testCase.php中被零除

到目前为止我尝试过的事情:

  • 使用“ \ Exception”而不是“ Exception”进入通用名称空间,并在那里找到类

  • 通过在代码开头编写use Exception或类似表达式来使名称空间已知

  • 使用了其他各种类名,而不是“ Exception”(例如,ErrorException,Error,Throwable,DivisionByZeroError ...忘记了我尝试过的所有内容)

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

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

我该怎么做才能使catch块捕获所有抛出的异常?

如果有关系:我使用的是PHP版本7.3.0。

1 个答案:

答案 0 :(得分:1)

您需要使用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
            );
    }
});