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



推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 异常要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常ÿ ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
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社区 版权所有