PHP异常类及异常处理操作实例详解


Posted in PHP onDecember 19, 2018

本文实例讲述了PHP异常类及异常处理操作。分享给大家供大家参考,具体如下:

异常处理归类于错误处理,PHP从5.1.0开始增加了Exception异常处理类。

一、异常处理

PHP 异常处理与Java相似,都使用try、throw、catch语句,发生异常时代码。如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。

1、try:

用于可能发生异常的代码块。

2、throw:

规定如何触发(trigger)异常,用于抛出异常。每一个throw必须对应至少一个catch。

3、catch:

捕获异常,并创建包含异常信息的对象。

说明:姑且认为php的异常必须throw才能捕获到。

基本结构:

try{
#some codes
throw new Exception("message"[,code[,...]]);
}
catch(Exception $ex){
#some codes
}

二、PHP 异常基类Exception

类摘要:

Exception {
/* 属性 */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* 方法 */
public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
final public string getMessage ( void )
final public Exception getPrevious ( void )  //获取异常链中前一个异常
final public int getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )   //获取异常追踪信息
final public string getTraceAsString ( void )  //字符串方式返回异常追踪信息
public string __toString ( void )
final private void __clone ( void )
}

说明:

由该基类可看出,php异常对象主要包含异常的文本信息(message)、异常代码/代号(code,应该是用于开发人员标识)、异常发生的文件(file,即发生异常的php文件)、异常发生的具体位置(line,抛出异常的行号)。

示例:

<?php
try {
 throw new Exception("Some error message", 30);//抛出异常,设置异常代号为30
} catch(Exception $e) {
 echo "Exception:file:".$e->getFile().",message:" . $e->getMessage().",code:".$e->getCode()."line:".$e->getLine();
}
?>

浏览器打印结果:

Exception:file:D:\studyFolder\wamp\workspace\basicphp\testException.php,message:Some error message,code:30line:3

关于php中类与对象的基础(如方法调用),具体看类与对象小节。

三、自定义异常类

示例:

class customException extends Exception
 {
 public function errorMessage()
 {
 //error message
 $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
 .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
 return $errorMsg;
 }
 }

抛出与捕获该异常:

try{
throw new customException("这是自定义异常。");
}
catch(customException $ex){
#some codes
}

四、多catch捕获异常

当一个try语句中可能抛出不同的异常时,对应的可有多个catch块捕获不同类型异常。同java中的一些注意点:

1、大异常catch放后面。因为抛出异常时按顺序判断先满足哪个catch,一次仅执行一个catch。

2、执行一次try,最多执行一个catch(发生异常时),即若前面某个catch满足执行,则后面的catch不再考虑。(常见考题)

五、嵌套抛出异常

结构示例:

try{
 try{
  throw new Exception("第一个异常");
 }
 catch(Exception $e1){
  #相关处理
  throw new Exception("处理后抛出异常");//再次抛出异常
 }
}
catch(Exception $e2){
 #相关处理
}

六、设置顶层异常处理器

set_exception_handler('myException'):函数设置所有未捕获的异常的处理函数句柄(函数名,此处即myException)。

示例:

<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>

结果:

Exception:Uncaught Exception occurred

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
谈谈PHP语法(4)
Oct 09 PHP
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
php基础知识:函数基础知识
Dec 13 PHP
动易数据转成dedecms的php程序
Apr 07 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
PHP封装的完整分页类示例
Aug 21 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 #PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 #PHP
PHP获取星期几的常用方法小结
Dec 18 #PHP
php往mysql中批量插入数据实例教程
Dec 12 #PHP
yii2 url重写并隐藏index.php方法
Dec 10 #PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 #PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 #PHP
You might like
用Flash图形化数据(二)
2006/10/09 PHP
理解和运用PHP中的多态性[译]
2011/08/02 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Python线性方程组求解运算示例
2018/01/17 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
导致python中import错误的原因是什么
2020/07/01 Python
Python容器类型公共方法总结
2020/08/19 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
二手书店创业计划书
2014/01/16 职场文书
亲属关系公证书
2014/04/08 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript