我正在研究 W3schools 的例外情况 在此链接上,在标题之前的链接内:
“重新抛出异常”
有一句话说:
“如果抛出的异常属于 customException 类并且没有 customException 捕获,只有基本异常捕获,则异常将在那里处理。”
如果有人可以给我一个这句话的例子,我将非常感激。
我正在研究 W3schools 的例外情况 在此链接上,在标题之前的链接内:
“重新抛出异常”
有一句话说:
“如果抛出的异常属于 customException 类并且没有 customException 捕获,只有基本异常捕获,则异常将在那里处理。”
如果有人可以给我一个这句话的例子,我将非常感激。
基本上他们是说,如果您没有设置 catch 语句来捕获customException
它,它将落入一般的Exception
catch 语句。
在此示例中,第一个 catch 语句将捕获customException
,因为它明确设计为这样做。
try {
// fail
throw new customException();
}
catch (customException $e) {
// catch custom exception
}
catch (Exception $e) {
// catch any uncaught exceptions
}
在下一个示例中,因为缺少通用Exception
catch 块的子句将改为捕获它:
try {
// fail
throw new customException();
}
catch (Exception $e) {
// catch any uncaught exceptions
}
查看PHP 手册此页面上的示例 #2
w3schools 不是学习 PHP 的最佳场所,它以错误闻名
假设您有一个自定义异常定义为
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类型,它仍然会被捕获
示例中有两个catch
块。仅第一个捕获customException
;下一个抓住任何Exception
。如果第一个块捕获任何东西,你永远不会到达第二个块。但是由于 acustomException
也是 a 的一个例子,Exception
如果我们没有第一个catch
块,它就会被捕获。这样,第一个 catch 就会捕获它,并且执行永远不会到达第二个。
同时,阅读我在上面发布的链接,以及为什么 w3schools 是一个坏主意。