0

我正在研究 W3schools 的例外情况 在此链接上,在标题之前的链接内:

“重新抛出异常”

有一句话说:

“如果抛出的异常属于 customException 类并且没有 customException 捕获,只有基本异常捕获,则异常将在那里处理。”

如果有人可以给我一个这句话的例子,我将非常感激。

4

4 回答 4

7

基本上他们是说,如果您没有设置 catch 语句来捕获customException它,它将落入一般的Exceptioncatch 语句。

在此示例中,第一个 catch 语句将捕获customException,因为它明确设计为这样做。

try {
    // fail
    throw new customException();
}
catch (customException $e) {
    // catch custom exception
}
catch (Exception $e) {
    // catch any uncaught exceptions
}

在下一个示例中,因为缺少通用Exceptioncatch 块的子句将改为捕获它:

try {
    // fail
    throw new customException();
}
catch (Exception $e) {
    // catch any uncaught exceptions
}
于 2012-06-01T16:54:04.483 回答
3

查看PHP 手册此页面上的示例 #2

w3schools 不是学习 PHP 的最佳场所,它以错误闻名

于 2012-06-01T16:54:24.270 回答
2

假设您有一个自定义异常定义为

class CustomException extends Exception.

现在在您的代码中的某处:

try
  {
  // do something that throws a CustomException
  }

catch(Exception $e) // you are only catching Exception not CustomException,
// because there isn't a specific catch block for CustomException, and
// because Exception is a supertype of CustomException, the exception will 
// still be caught here.
  {
  echo 'Message: ' .$e->getMessage();
  }

那么它的意思是,因为CustomException是Exception的子类,所以只要你在没有针对更具体的子类类型的catch块的情况下捕获超类的Exception类型,它仍然会被捕获

于 2012-06-01T16:55:37.453 回答
2

示例中有两个catch块。仅第一个捕获customException;下一个抓住任何Exception。如果第一个块捕获任何东西,你永远不会到达第二个块。但是由于 acustomException也是 a 的一个例子,Exception如果我们没有第一个catch块,它就会被捕获。这样,第一个 catch 就会捕获它,并且执行永远不会到达第二个。

同时,阅读我在上面发布的链接,以及为什么 w3schools 是一个坏主意。

于 2012-06-01T16:55:37.683 回答