PHP程序异常处理实现方法

一个异常(Exception)则是在一个程序执行过程中出现一个例外或是一个事件,它中断了指令的运行,跳转到其他程序模块继续执行。所以异常处理经常被当作程序的控制流程使用。无论是错误还是异常,应用程序都必须能够以妥善的方式处理,并做出相应的反映,希望不要丢失数据或者导致程序崩溃。异常处理用于在指定的错误发生时改变脚本的正常流程,是PHP5中的一个新的重要特性。异常处理是一种可扩展、易维护的错误处理统一机制,并提供了一种新的面向对象的错误处理方式。在Java、C#及Python等语言中很早就提供了这种异常处理机制,如果你对某一种语言中的异常处理熟悉,那么对PHP中提供的异常处理机制也不会陌生。

  异常处理和编写程序的流程控制相似,所以也可以通过异常处理实现一种另类的条件选择结构。异常就是在程序运行过程中出现的一些意料之外的事件,如果不对此事件进行处理,则程序在执行时遇到异常将崩溃。处理异常需要再PHP脚本中使用以下语句:

try{                                                //所有需要进行异常处理的代码都必须放入这个代码块内

……                                                //在这里可以使用throw语句抛出一个异常对象
}catch(ex1){                            //使用该代码块捕获一个异常,并进行处理
……                                             //处理发生的异常,也可再次抛出异常
}

  正确的处理程序应当包括:

  Try – 使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

  Throw – 这里规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”

  Catch – “catch” 代码块会捕获异常,并创建一个包含异常信息的对象

在PHP代码中所产生的异常可以被throw语句抛出并被catch语句捕获。需要进行异常处理的代码都必须放入try代码块内,以便捕获可能存在的异常。每一个try至少要有一个与之对应的catch,也不能出现单独的catch,另外try和cache之间也不能有任何的代码出现。一个异常处理的简单实例如下所示:


1

2

3

4

5

6

7

8

9

10

<?php

try{

$error=‘Always throw this error‘;

throw new Exception($error); //创建一个异常对象,通过throw语句抛出

echo ‘Never executed‘; //从这里开始,try代码块内的代码将不会再被执行

}catch(Exception $e){

echo ‘Caught exception;‘, $e->getMessage(),"\n"; //输出捕获的异常消息

}

echo ‘Hello World‘; //程序没有崩溃继续向下执行

?>

在上面的代码中,如果try代码中出现某些错误,我们就可以执行一个抛出异常的操作。在某些编程语言中,例如Java中,在出现异常时将自动抛出异常。而在PHP中,异常必须手动抛出。throw关键字将处罚异常处理机制,它是一个语言结构,而不是一个函数,但必须给它传递一个对象作为值。在最简单的情况下,可以实现一个内置的Exception类,就像以上代码所示那样。如果在try语句中有异常对象被抛出,该代码块不会再继续向下执行,而直接跳转到catch中执行。并传递给catch代码块一个对象,也可以理解为被catch代码块捕获的对象,其中就是导致异常被throw语句抛出的对象。在catch代码块中可以简单地输出一些异常的原因,也可以是try代码块中任务的另一个版本解决反感,此外,也可以在这个catch代码块中产生新的异常。最重要的是,在异常处理之后,程序不会崩溃,而会继续执行。

>> 本文固定链接: http://php.ncong.com/php_course/wrong/yichangshixian.html

>> 转载请注明: 恩聪php 2014年08月05日 于 恩聪PHP学习教程 发表

时间: 2024-11-09 08:50:28

PHP程序异常处理实现方法的相关文章

c++异常处理的方法

c++异常处理 程序运行时常会碰到一些异常情况,例如:做除法的时候除数为 0:用户输入年龄时输入了一个负数:用 new 运算符动态分配空间时,空间不够导致无法分配:访问数组元素时,下标越界:打开文件读取时,文件不存在等等. 这些异常情况,如果不能发现并加以处理,很可能会导致程序崩溃. 所谓“处理”,可以是给出错误提示信息,然后让程序沿一条不会出错的路径继续执行:也可能是不得不结束程序,但在结束前做一些必要的工作,如将内存中的数据写入文件.关闭打开的文件.释放动态分配的内存空间等. C++ 引入了

也来说说关于未在本地计算机上注册“VFPOLEDB.1”的程序的解决方法

大家都知道VFP是一个非常古老的数据库.但是,还有一些单位用到这些数据库. 前段时间,也做了一个关于DBF数据导出的功能的测试.程序以前有同事写好了,但当我进行修改调试的时候,问题就出来了. 调试的时候,一切都是正常的,VFPOLEDBSetup.msi这个肯定得先安装. 但是,架设到IIS上之后,就不行了,出现未在本地计算机上注册"VFPOLEDB.1"的程序这样的错误. 由于之前也没碰过DBF文件导入导出或者操作方面的问题,所以,第一想到的是百度. 百度上面,当然有好多答案,基本上

微信小程序数据请求方法wx.request小测试

微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </view> <button bindtap="RequestData" value="Button">Button</button> 主要是一个按钮,点击后将请求的数据写入到textarea中 js文件: Page({ data:{ textd

两种在linux下创建应用程序快捷方式的方法

两种在linux下创建应用程序快捷方式的方法: A. 在桌面上创建快捷方式 B. 在应用程序菜单中添加快捷方式 在桌面上创建快捷方式 这是最简单的一种方法,在桌面上单击鼠标右键,会有一个“创建启动器”栏.这里我以为mplayer创建快捷方式为例说明: 名称-mplayer(或者你喜欢的任何名称,这个名称会出现在快捷图标的 下方) 命令-/usr/bin/gmplayer(这个是mplayer的gui应用程序的执行文件,跟 安装路径相关,可以通过which gmplayer找到) 图标-一般应用程

C#取得控制台应用程序的根目录方法

如有雷同,不胜荣幸,若转载,请注明 取得控制台应用程序的根目录方法1:Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径2:AppDomain.CurrentDomain.BaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集 取得WinForm应用程序的根目录方法1:Environment.CurrentDirectory.ToString();//获取或设置当前工作目录的完全限定路径2:Application.StartupP

黑马程序员——hashCode方法的作用,java内存泄露

hashCode方法的作用:当有一个对象要存入hash集合的时候,JVM首先会调用hashCode方法获取该对象的哈希值,然后根据哈希值找到相应的存储区域,最后取出该区域的所有元素与该对象进行equals比较,如果相等,不存入该元素,否则,存入.这样不用遍历集合中的所有元素就能的到我们想要的结果,提高了查找的效率.但是如果不覆写hashCode方法的话,相同的对象可能会存储在HashSet集合中,虽然他们equals比较相同,但他们的内存区域不同的话,就不会进行equals比较了.为了让两个相同

[转] python程序的调试方法

qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python def debug_demo(val): if val <= 1600 : print "level 1" print 0 elif val <= 3500 : print "level 2" print (val - 1600) * 0.05 elif val

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序的解决方法

在win7 操作系统中SQL2008导入excel2007 出现: 未在本地计算机上注册"microsoft.ACE.oledb.12.0"提供程序 的解决方法: 出现这个原因是office 2007没有安装64位的数据驱动,下载: http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe 数据引擎安装后即可.

Java语言程序设计基础篇 方法(五)

生成随机字符 生成随机字符就是生成0到65535之间的一个随机整数,因为0<=Math.random()<1.0,必须在65535+1 (int) (Math.random() * (65535+1)) 随机生成小写字母 public class RandomCharacter { public static char getRandomCharacter(char ch1,char ch2){ return (char)(ch1 +Math.random() * (ch2 - ch1 + 1