为什么我们使用try块来抛出异常。我们不能在没有试块的情况下扔掉并抓住它们。它的重要性是什么?

时间:2017-06-24 04:36:42

标签: php

我试图找出异常处理中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();
    }

4 个答案:

答案 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;,并且您的程序终止而不执行剩余的代码;见hereManual提到这是通常的结果:

  

除非使用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用于处理异常并从中恢复。如果你没有捕获,你的程序将停止执行。如果发生异常并且你抓住了它,你可以用它来做事情,比如像你现在一样回应它。