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 相关文章推荐
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
关于php正则匹配汉字的方法介绍
Apr 25 PHP
PHP数据类型的总结分析
Jun 13 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
跟我学Laravel之快速入门
Oct 15 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 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
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
PHP仿盗链代码
2012/06/03 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
python获取本机外网ip的方法
2015/04/15 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
django中的数据库迁移的实现
2020/03/16 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
毕业求职自荐信格式是什么
2013/11/19 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
新书吧创业计划书
2014/01/31 职场文书
食品安全承诺书范文
2014/08/29 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
话题作文之学会尊重
2019/12/16 职场文书
vue elementUI表格控制对应列
2022/04/13 Vue.js