热门标签 | 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   "输入成功" ; 
        } 
    } 
?> 



推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
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社区 版权所有