我试图找出异常处理中try块的必要性。
我正在学习php中的自定义错误处理,代码如下:
class customException extends Exception{
public function errorMessage(){
return "Error at line ".$this->getLine()." in ".$this->getFile()."<br>".$this->getMessage()." is not a valid email address";
}
}
$email="someone@example.com";
try{
if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
throw new customException($email);
}
}
catch(customException $e){
echo $e->errorMessage();
}
答案 0 :(得分:3)
在try
块中执行的代码可能会抛出不同类型的异常
try {
thingThatMightBreak();
}
catch (CustomException $e) {
echo "Caught CustomException ('{$e->getMessage()}')\n{$e}\n";
}
catch (Exception $e) {
echo "Caught Exception ('{$e->getMessage()}')\n{$e}\n";
}
答案 1 :(得分:2)
如果在没有try / catch块的情况下抛出异常,则会发生致命错误。出现错误消息,引用了这种可避免的情况的原因:&#34;致命错误:未捕获的异常&#34;,并且您的程序终止而不执行剩余的代码;见here。 Manual提到这是通常的结果:
除非使用set_exception_handler()
定义了处理程序
设置异常处理程序可以避免看到&#34;致命错误&#34;消息并允许根据需要处理异常,但在处理程序停止执行后,程序也会结束;见here。
try / catch块为代码提供了尝试执行的机会。如果出现异常,可以通过捕获它来安全地处理,以防止程序突然停止,如下所示:
<?php
try {
$myvar = null;
if (!isset($myvar)) {
throw new Exception("unset variable");
}
} catch (Exception $e) {
echo $e->getMessage();
}
echo "\nStill carrying on and on ...\n";
请参阅demo
答案 2 :(得分:2)
未捕获的异常将终止程序的执行。
顺便说一句,也可以抛出异常并从try / catch块中处理它们。 这是php funtion set_exception_handler()
的文档页面答案 3 :(得分:1)
try / catch用于处理异常并从中恢复。如果你没有捕获,你的程序将停止执行。如果发生异常并且你抓住了它,你可以用它来做事情,比如像你现在一样回应它。