当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP异常类及异常处理操作实例详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-02 10:49:42 浏览: 评论:0 

这篇文章主要介绍了PHP异常类及异常处理操作,结合实例形式较为详细的分析了php异常与异常处理相关操作技巧与注意事项,需要的朋友可以参考下。

本文实例讲述了PHP异常类及异常处理操作,分享给大家供大家参考,具体如下:

异常处理归类于错误处理,PHP从5.1.0开始增加了Exception异常处理类。

一、异常处理

PHP 异常处理与Java相似,都使用try、throw、catch语句,发生异常时代码。如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。

1、try:

用于可能发生异常的代码块。

2、throw:

规定如何触发(trigger)异常,用于抛出异常。每一个throw必须对应至少一个catch。

3、catch:

捕获异常,并创建包含异常信息的对象。

说明:姑且认为php的异常必须throw才能捕获到。

基本结构:

  1. try{ 
  2. #some codes 
  3. throw new Exception("message"[,code[,...]]); 
  4. catch(Exception $ex){ 
  5. #some codes 

二、PHP 异常基类Exception

类摘要:

  1. Exception { 
  2. /* 属性 */ 
  3. protected string $message ; 
  4. protected int $code ; 
  5. protected string $file ; 
  6. protected int $line ; 
  7. /* 方法 */ 
  8. public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] ) 
  9. final public string getMessage ( void ) 
  10. final public Exception getPrevious ( void )  //获取异常链中前一个异常 
  11. final public int getCode ( void ) 
  12. final public string getFile ( void ) 
  13. final public int getLine ( void ) 
  14. final public array getTrace ( void )   //获取异常追踪信息 
  15. final public string getTraceAsString ( void )  //字符串方式返回异常追踪信息 
  16. public string __toString ( void ) 
  17. final private void __clone ( void ) 

说明:

由该基类可看出,php异常对象主要包含异常的文本信息(message)、异常代码/代号(code,应该是用于开发人员标识)、异常发生的文件(file,即发生异常的php文件)、异常发生的具体位置(line,抛出异常的行号)。

示例:

  1. <?php 
  2. try { 
  3.  throw new Exception("Some error message", 30);//抛出异常,设置异常代号为30 
  4. } catch(Exception $e) { 
  5.  echo "Exception:file:".$e->getFile().",message:" . $e->getMessage().",code:".$e->getCode()."line:".$e->getLine(); 
  6. ?> 

浏览器打印结果:

Exception:file:D:\studyFolder\wamp\workspace\basicphp\testException.php,message:Some error message,code:30line:3

关于php中类与对象的基础(如方法调用),具体看类与对象小节。

三、自定义异常类

示例:

  1. class customException extends Exception 
  2.  { 
  3.  public function errorMessage() 
  4.  { 
  5.  //error message 
  6.  $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() 
  7.  .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'
  8.  return $errorMsg
  9.  } 
  10.  } 

抛出与捕获该异常:

  1. try{ 
  2. throw new customException("这是自定义异常。"); 
  3. catch(customException $ex){ 
  4. #some codes 

四、多catch捕获异常

当一个try语句中可能抛出不同的异常时,对应的可有多个catch块捕获不同类型异常。同java中的一些注意点:

1、大异常catch放后面。因为抛出异常时按顺序判断先满足哪个catch,一次仅执行一个catch。

2、执行一次try,最多执行一个catch(发生异常时),即若前面某个catch满足执行,则后面的catch不再考虑。(常见考题)

五、嵌套抛出异常

结构示例:

  1. try{ 
  2.  try{ 
  3.   throw new Exception("第一个异常"); 
  4.  } 
  5.  catch(Exception $e1){ 
  6.   #相关处理 
  7.   throw new Exception("处理后抛出异常");//再次抛出异常 
  8.  } 
  9. catch(Exception $e2){ 
  10.  #相关处理 

六、设置顶层异常处理器

set_exception_handler('myException'):函数设置所有未捕获的异常的处理函数句柄(函数名,此处即myException)。

示例:

  1. <?php 
  2. function myException($exception
  3. echo "<b>Exception:</b> " , $exception->getMessage(); 
  4. set_exception_handler('myException'); 
  5. throw new Exception('Uncaught Exception occurred'); 
  6. ?> 

结果:Exception:Uncaught Exception occurred

Tags: PHP异常类 PHP异常处理

分享到: