热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP中Exception异常处理类的使用详解php类库

本文章介绍了在php中常用的简单的异常处理类,我们主要是讲述到了Exception处理,代码如下:?phptry{$a100;}catch(Exception


PHP中Exception异常处理类的使用详解

本文章介绍了在php中常用的简单的异常处理类,我们主要是讲述到了Exception处理,代码如下:



    try { 
         $a =10/0; 
    }catch (Exception  $e ){ 
         echo   "抛出异常" ; 
    } 
?> 

以上代码,并不会输出[抛出异常],而是输出了错误信息:Warning: Division by zero in......

说明:try块中并没有抛出异常,而是按照系统默认的错误处理机制进行处理,所以能不能捕获到异常,取决于有没有真正的抛出异常.代码如下:



class  Exception 

     protected   $message  =  'Unknown exception' ;    // 异常信息  
     protected   $code  = 0;                         // 用户自定义异常代码  
     protected   $file ;                             // 发生异常的文件名  
     protected   $line ;                             // 发生异常的代码行号  
     function  __construct( $message  = null,  $code  = 0); 
    final  function  getMessage();                 // 返回异常信息  
    final  function  getCode();                    // 返回异常代码  
    final  function  getFile();                    // 返回发生异常的文件名  
    final  function  getLine();                    // 返回发生异常的代码行号  
    final  function  getTrace();                   // backtrace() 数组  
    final  function  getTraceAsString();           // 已格成化成字符串的 getTrace() 信息  
     /* 可重载的方法 */  
     function  __toString();                        // 可输出的字符串  

?> 

简单的使用如下:(通过异常,抛出错误信息),代码如下:



try { 
     $error  =  'my error!' ; 
     throw   new  Exception( $error ) 
} catch (Exception  $e ) { 
     echo   $e ->getMessage(); 

我们可以扩展此类,方便我们的使用,代码如下:



class  MyException  extends  Exception 

     // 重定义构造器使 message 变为必须被指定的属性  
     public   function  __construct( $message ,  $code  = 0) { 
         // 自定义的代码  
         // 确保所有变量都被正确赋值  
        parent::__construct( $message ,  $code ); 
    } 
     // 自定义字符串输出的样式  
     public   function  __toString() { 
         return   __CLASS__  .  ": [{$this->code}]: {$this->message}n" ; 
    } 
     public   function  customFunction() { 
         echo   "A Custom function for this type of exceptionn" ; 
    } 

异常处理的基本思想是代码在try代码被调用执行。如果try码块出现错误,我们可以执行一个抛出异常的处理,某些编程语言,如java,在特定情况下将自动抛出异常。在php中,异常必须手动抛出,可以使用如下方式抛出一个异常,代码如下:

Throw new Exception(‘message’,code);

Throw 关键字将触发异常处理机制,它是一个语言结构,而不是一个函数,但是必须给它传递一个值。它要求一个接受对象。在最简单的情况下,可以实例化一个内置的Exception类。

最后,在try代码之后,必须至少给出一个catch代码块。可以将多个catch代码块与一个try代码块进行关联。如果每个catch代码块可以捕获一个不同类型的异常,可以使用多个catch代码块是有意义的。例如,如果想捕获Exception类的异常,代码如下



Catch(Exception  $e ) 

    //handing exception  

Catch代码捕获的对象就是导致异常并传递给throw语句的对象(被throw 语句抛出)。使用Exception 类的实例,是不错的选择。

Exception类提供了如下的内置方法:

Getcode() —返回传递给构造函数的代码。

GetMessage()  —返回传递给构造函数的消息。

getFile() —返回产生异常代码的文件的路径

getLine() —返回产生异常的代码所在的行。

注意: 当捕获到一个异常后,try()块里面的后续代码将不会继续执行,而是会尝试查找匹配的[catch]代码块,当抛出一个异常后,如果不进行catch处理,则会报[Uncaught exception 'Exception']错误,代码如下:



     function  test( $val ){ 
         if  ( $val >100){ 
             throw   new  Exception( "提示信息:您输入的值过大" ); 
        } 
    } 
    test(111); 
?> 

当一个异常抛出后,catch语句块可以进行处理也可以不处理,以下是我用户注册功能的部分代码



try{ 
      //check forms filled in  
      if (!filled_out( $_POST )){ 
          throw   new  Exception( '你还没有填写表单,请回去填写' ); 
     } 
      //check email address not valid  
      if (!check_email( $email )){ 
         throw   new  Exception( '邮件的格式不正确' ); 
     } 
      //检查密度的长度是否大于6  
      if ( strlen ( $passwd <6)){ 
          throw   new  Exception( &#39;密度的长度应该大于6&#39; ); 
     } 
      //检查两次密码是否相等  
      if ( $passwd != $passwd1 ){ 
          throw   new  Exception( &#39;两次密码不一样,请重新输入&#39; ); 
     } 
      //检查用户名的长度是否正确  
      if ( strlen ( $username )>16){ 
          throw   new  Exception( &#39;用户名的长度不符,请重新输入&#39; ); 
     } 
    
 } catch(Exception  $e ){ 
      echo   $e ->getMessage();  //输出异常信息。  
 } 

php对异常的处理与java一样,用到的是try{}catch(){},定义顶级异常处理器用到的函数是:set_exception_handler("My_exception");这里的My_expection是开发者自定义的异常处理函数,既顶级异常处理器,只有当程序中没有函数来处理异常才有顶级异常处理器来处理异常,如果没有定义顶级异常处理器,则由系统默认的异常处理器来处理异常,举例说明:



    set_exception_handler( "My_expection" ); 
     function  My_expection(){ 
         echo   "这里是顶级异常处理器" ; 
    } 
    try{ 
        nohello( "hello" ); 
    }catch(Exception  $e ){ 
         throw   $e ; 
    } 
   function  nohello( $nohello ){ 
           if ( $nohello  ==  "hello" ){ 
               throw   new  Exception( "不能输入hello" ); 
          } else { 
             echo   "输入成功" ; 
        } 
    } 
?> 



推荐阅读
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 如何在PyCharm中配置Python脚本的默认模板
    本文介绍如何在PyCharm中设置Python脚本的默认模板,以便每次创建新的.py文件时自动填充预设内容,提高开发效率。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
author-avatar
双子-殇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有