【PHP的异常处理【完整】】

PHP的异常处理机制大多数和java的很相似,但是没有finally,而且还可以自定义顶级异常处理器;捕捉到异常信息后,会跳出try-catch块,如果catch中没有跳转的动作,则会继续执行下一条语句。

简单的异常捕捉:

 1 <?php
 2     function addUser($name)
 3     {
 4         if($name=="zheng")
 5         {
 6             echo "添加成功!<br/>";
 7         }
 8         else
 9         {
10             throw new Exception("添加失败!<br/>");
11         }
12     }
13
14     function updateUser($name)
15     {
16         if($name=="song")
17         {
18             echo "更新成功!<br/>";
19         }
20         else
21         {
22             throw new Exception("更新失败!<br/>");
23         }
24     }
25     try
26     {updateUser("xx");
27         addUser("zheng");
28
29     }
30     catch(Exception $e)
31     {
32         echo "捕捉到了异常信息!&nbsp;".$e->getMessage();
33     }
34     echo "你好";
35 ?>

通过继承Exception类可以自定义异常类,实现自定义异常,可以捕获不同类型的异常以实现不同的处理机制。

 1 <?php
 2 //通过这个程序可以实现捕捉不同的异常!
 3 class Exception1 extends Exception
 4 {
 5
 6 }
 7 class Exception2 extends Exception
 8 {
 9
10 }
11
12 //$x=1;
13 $x=2;
14 try
15 {
16     if($x==1)
17     {
18         throw new Exception1("异常信息1");
19     }
20     else
21     {
22         throw new Exception2("异常信息2");
23     }
24 }
25 catch(Exception1 $e1)
26 {
27     echo "捕捉到了".$e1->getMessage()."!";
28 }
29 catch(Exception2 $e2)
30 {
31     echo "捕捉到了".$e2->getMessage()."!";
32 }
33 ?>

通过set_exception_handler方法可以自定义系统默认的异常处理器,我们可以认为是顶级异常处理器,一旦出现异常,系统会自动调用

1 <?php
2 function myException($e)
3 {
4     echo "这里是顶级异常处理器!在没有进行捕捉的时候默认处理异常的异常处理器!<br/>异常信息是:".$e->getMessage();
5 }
6 set_exception_handler("myException");
7
8 throw new Exception("出现了程序异常!");
9 ?>

最后,PHP的异常处理机制还存在漏洞(PHP5.3.5):

在下面的情况下PHP不会捕捉异常,而是直接报错。

 1 <?php
 2 //php的两个经典漏洞
 3 try
 4 {
 5     $a=8/0;
 6 }
 7 catch(Exception $e)
 8 {
 9     echo "异常信息捕捉成功!<br/>";
10 }
11
12 try
13 {
14     $file=fopen("xxx.txt","r+");
15 }
16 catch(Exception $e)
17 {
18     echo "异常信息捕捉成功!<br/>";
19 }
20
21 ?>

时间: 2024-08-07 04:02:24

【PHP的异常处理【完整】】的相关文章

python study to 8 基础篇

面向对象的三大特性--多态 多态(多种类型.多种形态):在面向对象编程中,类方法中所传的形式参数的各种基本数据类型. python面向对象编程中的多态特性中的类方法中的参数可以是python中的任意基本数据类型,在python多态特性中类方法参数的基本数据类型不作区分. 在python面向对象多态中,函数参数传递可以支持多个多种类型,不区分哪种类型数据 例如: def func(arg,kwargs): print(arg) func(123) func("",""

自动化运维Python系列(六)之面向对象

面向对象编程 面向过程:根据业务逻辑从上到下垒代码 函数式:将某功能代码封装到函数中,以后直接调用,不需要再次编写 面向对象:对函数进行分类和封装,让开发"更快更好更强..." # 像Java和C#等编程语言仅支持面向对象编程,而Python支持函数式编程和面向对象编程混用 面向对象示例 # 函数式编程 def bar():     print('bar')   bar()  # 直接调用函数 # 面向对象编程 class Foo:  # 创建类        def bar(self

Spring MVC异常处理代码完整实例

Spring MVC异常处理流程: 提供构造方法传值: 配置异常处理器的bean 原文地址:https://www.cnblogs.com/niwotaxuexiba/p/11218171.html

Python运行环境与异常处理

1.Python的启动 Python的命令格式: python [option] ... [-c cmd | -m mod | file | -] [arg] ... 选项 描述 -J 启动将从Python3中删除或更改某些功能的警告 -B 阻止在导入时创建.pyc或.pyo文件 -E 忽略环境变量 -h 打印所有可用命令行选项的列表 -i 在程序执行后进入交互模式 -m module 以脚本的形式运行库模块module -O 优化模式 -OO 优化模式,在创建.pyo文件时删除文档字符串 -Q

ASP.NET MVC异常处理

ASP.NET MVC异常处理方案 如何保留异常前填写表单的数据 ASP.NET MVC中的统一化自定义异常处理 MVC过滤器详解 MVC过滤器使用案例:统一处理异常顺道精简代码 ASP.NET MVC下基于异常处理的完整解决方案

第七章 Python异常处理

什么是异常? 顾名思义,异常就是程序因为某种原因无法正常工作了,比如缩进错误.缺少软件包.环境错误.连接超时等等都会引发异常.一个健壮的程序应该把所能预知的异常都应做相应的处理,应对一些简单的异常情况,使得更好的保证程序长时间运行.即使出了问题,也可让维护者一眼看出问题所在.因此本章节讲解的就是怎么处理异常,让你的程序更加健壮. 7.1 捕捉异常语法 try...except... try:      expression except [Except Type]:      expressio

手机卫士13_屏幕适配_异常处理_盈利模式_混淆加密

今天是手机卫士最后一天 1,简易屏幕适配: ①使用线性,相对,帧布局,这三种常用布局在所有设备上几乎可以完整实现,多使用dp,sp,不要使用像素,dp,sp会自动适应屏幕 ②浮动窗体显示的距离问题:它show出来的距离就是像素,所以显示距离不会适应屏幕. 代码里接收的单位一般都是像素. 解决方式:把输入的数字转换成dp单位. 得到像素密度*像素 获得dp数据,根据屏幕实现的像素效果 通过工具类去转换成dp数据DesityUtils 2,应用程序的异常处理: 2.1 alpha版本:小范围的内部测

黑马程序员——————&gt; 异常处理之修复

------- android培训.java培训.期待与您交流! ---------- java的异常机制主要依赖于try, catch, finally, throw, throws五个关键字,其中try关键字后紧跟一个花括号扩起来的代码块,简称try块,它里面放置可能引发异常的代码.catch后对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块.多个catch块后还可以跟一个finally块,finally块用于回收在try块里打开的物理资源,异常机制会保证finall

错误和异常处理

一.错误处理 1.常见的错误级别 // Notice json_encode($arr); // Warning json_encode(); // Fatal error jsonp_encode(); 2.设置php报告错误的级别 错误级别查看可通过文档的 函数参考->错误处理->预定义常量 查看. //只显示error类型的错误 error_reporting(E_ERROR); // 报告所有错误,&(并且) ~(不包括) error_reporting(E_ALL &