php - 异常不被识别为一个类并且不被捕获
问题描述
我对 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
通过在代码开头编写或类似的表达式使命名空间为人所知使用各种其他类名而不是“异常”(例如 ErrorException、Error、Throwable、DivisionByZeroError ...不记得我尝试过的所有内容)
如果我使用“throw”关键字,它会跳转到 catch 块就好了。但它应该会自动捕获除零之类的异常,而无需我抛出一个,对吗?至少这是我从网上搜索收集到的(其他编程语言也是如此)。
我也考虑过使用set_exception_handler
,但我不知道如何以这种方式获取特定的异常信息,因为我不能使用Exception->getMessage()
. 唯一的方法是 - 再次 - 手动抛出每个异常。
为了使 catch 块捕获所有抛出的异常,我必须做什么?
如果重要的话:我使用的是 PHP 7.3.0 版。
解决方案
您需要用来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
);
}
});
推荐阅读
- javascript - vue.js 中多个导入和注册的组件
- ios - 使用 fastlane 匹配方法在本地 iOS 设备上运行 react-native 应用程序
- c# - Richtextbox.Document.Blocks 中的 C# WPF 调度程序
- android - 折叠图像时,NestedScrollView 内的 RecyclerView 不会向上滚动
- ansible - 访问 Jinja 模板中的已注册变量
- c - 如何获取 uint32_t 的 uint8_t 数据
- visual-studio - 在 VS 2017 社区中更改行号分隔符颜色
- javascript - 悬停时播放的隐藏音频
- javascript - 如何在 JavaScript 中使用 import 而不会产生副作用或通过其他任何方式执行?
- javascript - 元素变化时如何执行函数?(没有 setInterval)