异常处理

异常处理的原理

PHP中的异常处理是PHP5新引进的一项功能,与其他语言类似,在PHP中进行异常处理也是用关键字trycatchthrow来实现的。其中try的功能是检测异常,catch的功能是捕获异常,throw的功能是抛出异常。

PHP中的异常处理

try关键字必须与catch关键字对应,一个try关键字可以与多个catch关键字相对应以捕获不同的异常。PHP程序会按所有与try关键字相对应的catch关键字定义的顺序执行,直到所有的异常均被检测完成。

对于抛出的异常,除了可以用catch捕获以外,还可以使用set_exception_handler函数进行处理。如果一个异常即没有被捕获,也没有使用set_exception_handler函数进行处理,将会产生一个严重的错误。

异常类Exception

Exception类用于脚本发生异常时建立异常对象,该对象将用于存储异常信息并用于抛出和捕获。在准备抛出异常时,需要首先建立异常对象,其语法格式如下:

$e = new Exception([string $msg [,int $code]]);

echo $e->getMessage();

异常抛出关键字throw

异常对象是由throw关键字抛出的,其语法格式如下:

throw new Exception();

异常捕获语句try-catch

一个try语句至少和一个catch语句相对应。try-catch语句的语法格式如下:

try{
  throw new Exception("Error Processing Request", 1);
}catch(Exception $e){
  // 捕获异常后的操作
}

异常处理函数设置set_exception_handler

有些时候,使用一个专门的函数对一些可能没有被捕获的异常进行处理。这个函数可以通过set_exception_handler来设置,其语法格式如下:

set_exception_handler(exception_handler)

其中exception_handler是用于处理未捕获异常的函数名。需要注意的是用于处理未捕获异常的函数必需用set_exception_handler前定义。

function exception_handler($e){

}

其中,$e是异常对象。

完整的异常信息

在实际应用中,往往会根据要显示出更详细的异常信息。这时,就需要使用Exception类中的其他方法。getTrace函数返回一个用于储存跟踪路线的数组,主要包含以下键值:

  • file: 发生异常的程序文件名。
  • line: 发生异常的代码所在的行号
  • function: 发生异常的函数或方法
  • class: 发生异常的函数或方法所在的类
  • type: 调用发生异常的函数或方法的类型
  • args: 发生异常的函数或方法所接受的参数

扩展的异常处理类

在实际应用中,往往根据异常类型的不同使用不同的异常处理类。这就需要对一般的异常处理类Exception进行扩展。对Exception类进行扩展有以下三点好处:

  • 提高代码的可读性,容易区别不同类型的异常。
  • 扩展类可以提供自定义功能。
  • 捕获异常时可根据异常类型的不同做出不同的反应。

一个类继续自Exception即可扩展异常类。

在捕获异常时分别捕获不同的异常对象来获得不同的信息,需要注意以下两点:

  • 捕获异常时,往往仍然需要捕获Exception类,以用来处理未捕获的异常
  • 在捕获时是按照从上向下的捕获顺序,如果先捕获Exception类,则会导致异常不能被正确的代码处理。所以,应当异常子类写在前面,父类写在后面。

results matching ""

    No results matching ""