📜  PHP 异常处理

📅  最后修改于: 2020-09-30 03:17:50             🧑  作者: Mango

PHP中的异常处理

异常处理是PHP的强大机制,用于处理运行时错误(运行时错误称为异常)。这样可以保持应用程序的正常运行。

使用异常处理的主要目的是维护应用程序的正常执行。

什么是Exception?

异常是程序的异常结果,可以由程序本身处理。基本上,异常会破坏程序的正常流程。但这与错误不同,因为可以处理异常,而程序本身无法处理错误。

换句话说,“程序的意外结果是一个异常,可以由程序本身来处理。”可以在PHP中引发并捕获异常。

为什么需要异常处理?

PHP提供了强大的机制,异常处理。它允许您处理运行时错误,例如IOException,SQLException,ClassNotFoundException等。异常处理的最流行示例是-除以零异常,这是算术异常。

注意:当异常中断程序或应用程序的正常执行时,需要进行异常处理。

在所有编程语言中,异常处理几乎都是相似的。当发生指定的错误情况时,它将更改程序的正常流程,该情况称为异常。为此,PHP提供了以下关键字:

Try-

try块包含可能具有异常或可能发生异常的代码。当在代码运行期间try块内发生异常时,将在catch块中捕获并解决该异常。try块之后必须是catch或finally块。一个try块后面可以接一个最少的和最大数量的catch块。

Catch-

catch块包含引发指定异常时执行的代码。它总是与try块一起使用,而不是单独使用。当发生异常时,PHP查找匹配的catch块。

Throw-

它是用于引发异常的关键字。它还有助于列出函数引发但无法处理的所有异常。

请记住,每次掷球必须至少有一个“接球”。

Finally-

finally块包含一个代码,该代码用于PHP中的清理活动。基本上,它执行程序的基本代码。

触发异常时会发生什么-

  • 代码的当前状态已保存。
  • 代码的执行切换到预定义的异常处理程序函数。
  • 根据情况,处理程序可以停止程序的执行,从保存的代码状态恢复执行,或从代码中的另一个位置继续执行代码。

异常处理优于错误处理的优势

异常处理是PHP中的重要机制,与错误处理相比,它具有以下优点-

错误类型分组-

在PHP中,基本和对象都可以作为异常抛出。它可以在类中创建异常对象和组异常的层次结构,还可以根据它们的类型对其进行分类。

将错误处理与常规代码分开-

在传统的错误处理中,if-else块用于处理错误。因为处理错误和条件的代码混合在一起,所以它使代码不可读。在try-catch块中,异常与代码保持独立,并且代码变得可读。

例子

借助示例学习如何在PHP-中进行异常处理

例子1

让我们以一个示例来说明throw和try-catch块的常见流程:

=1) {
     //throw an exception
     throw new Exception("Value must be less than 1");
   }
   return true;
}

//trigger an exception in a "try" block
try {
   checkNumber(5);
   //If the exception throws, below text will not be display
   echo 'If you see this text, the passed value is less than 1';
}

//catch exception
catch (Exception $e) {
   echo 'Exception Message: ' .$e->getMessage();
}
?>

输出:

Exception Message: Value must be less than 1

示例2:创建自定义异常

您可以通过扩展Exception类来创建用户定义的异常。查看下面的代码,以了解如何创建用户定义的异常-

";
      }
    }
    catch (DivideByZeroException $dze) {
        echo "Divide by Zero Exception! 
"; } catch (DivideByNegativeNoException $dnne) { echo "Divide by Negative Number Exception
"; } catch (Exception $ex) { echo "Unknown Exception"; } } checkdivisor(18, 3); checkdivisor(34, -6); checkdivisor(27, 0); ?>

输出:

Result of division = 6
Divide by Zero Exception!
Divide by Negative Number Exception!

要详细了解有关try-catch块的更多信息,请单击此处。