为什么我们使用 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();
    }

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

尝试/捕获用于处理异常并从中恢复。如果您没有捕获,则您的程序将停止执行。如果发生异常并抓住它,则可以像您当前那样进行呼应,例如回声。

相关内容

最新更新