我对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。
答案 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
);
}
});