【发布时间】:2019-06-12 20:36:23
【问题描述】:
我是 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 版。
【问题讨论】:
-
这似乎是VuoriLiikaluoma建议的唯一方法,除非你手动检查$x,顺便说一句,DivisionByZeroError只有在你模块时才会被抛出,例如$x % $ b.
-
@aynber 我之前发现了这个问题,并认为它比我想的要深入得多。如果我弄错了 try-catch 在 PHP 中的工作方式,可能仍然是重复的。我来自 C#/.NET 背景,
catch基本上可以捕获发生的每个异常,而无需抛出它们。我想要 PHP 类似的东西,并认为我做错了。那么我是否可以假设catch只捕获手动抛出的异常而没有捕获一般异常? -
不,它会捕获所有异常。但是,您收到的错误是警告,而不是异常。这是不同级别的错误。
-
@aynber 知道了。我还需要使用关键字
Error,我不知道它存在,因为它没有为我突出显示。在这种情况下,它确实是重复的。不过,非常感谢您的帮助!