我试图在异常处理中找出尝试块的需要。
我正在学习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();
}
在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";
}
未接收的异常将终止程序的执行。
顺便说一句,也可以抛出异常并将其从尝试/捕获块中处理。这是php funtion set_exception_handler((
如果您在没有尝试/捕获块的情况下投掷异常,则会发生致命错误。出现错误消息的原因是这种可避免的情况的原因:"致命错误:无人例外",并且您的程序在没有执行剩余代码的情况下终止;看这里。手册提到这是通常的结果:
除非使用set_exception_handler((
定义处理程序
设置异常处理程序避免看到"致命错误"消息,并允许按照您的意愿处理异常,但是在处理程序停止执行程序之后,也可以结束。请参阅此处。
Try/Catch Block为代码提供了尝试执行的机会。如果出现异常,可以通过捕获阻止程序突然停止的情况来安全处理,如下所示:
<?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
尝试/捕获用于处理异常并从中恢复。如果您没有捕获,则您的程序将停止执行。如果发生异常并抓住它,则可以像您当前那样进行呼应,例如回声。