PHP 异常处理

PHP 异常处理

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

使用异常处理的主要目的是 保持应用程序的正常执行

什么是异常

异常是程序的一个意外结果,可以由程序本身处理。基本上,异常会中断程序的正常流程。但它和错误不同,异常可以被程序本身处理,而错误无法被程序本身处理。

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

为什么需要异常处理

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

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

异常处理在所有编程语言中几乎都是相似的。它在指定的错误条件发生时改变程序的正常流程,这种条件被称为异常。PHP为此提供了以下关键字:

尝试(try)-

尝试块包含可能引发异常或可能在其中出现异常的代码。当在运行时代码的尝试块内发生异常时,它将在catch块中捕获和解决。尝试块必须跟随catch或finally块。一个尝试块可以跟随一个或多个catch块。

捕获(catch)-

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

抛出(throw)-

这是一个用于抛出异常的关键字。它还有助于列出函数抛出但其本身不处理的所有异常。

请记住,每个throw都必须至少有一个“catch”。

最后(finally)-

最后块包含在PHP中进行清理活动的代码。基本上,它执行程序的必要代码。

当触发异常时会发生什么

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

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

异常处理是PHP中的一个重要机制,它相对于错误处理具有以下优势-

错误类型的分组-

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

保持错误处理和正常代码分离 –

在传统的错误处理中,使用if-else块来处理错误。这使得代码变得难以阅读,因为处理错误和条件的代码混在一起。在try-catch块中,异常与代码分开,使代码可读性增强。

示例

通过示例学习PHP中的异常处理工作原理-

示例1

让我们通过一个示例来解释throw和try-catch块的常见流程:

<?php
//user-defined function with an exception
function checkNumber(num) {
   if(num>=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类来创建用户定义的异常。请查看下面的代码,了解如何创建用户定义的异常 –

<?php
class DivideByZeroException extends Exception { }
class DivideByNegativeNoException extends Exception { }
function checkdivisor(dividend,divisor){
    // Throw exception if divisor is zero
  try {
      if (divisor == 0) {
        throw new DivideByZeroException;
      }      else if (divisor < 0) {
         throw new DivideByNegativeNoException; 
      } 
      else {
        result =dividend / divisor;
        echo "Result of division =result </br>";
      }
    }
    catch (DivideByZeroException dze) {
        echo "Divide by Zero Exception! </br>";
    }
    catch (DivideByNegativeNoExceptiondnne) {
        echo "Divide by Negative Number Exception </br>";
    }
    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块的更多信息, 点此处 。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程