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 相关文章推荐
一个简单计数器的源代码
Oct 09 PHP
简单的用PHP编写的导航条程序
Oct 09 PHP
php $_SERVER当前完整url的写法
Nov 12 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
解析php时间戳与日期的转换
Jun 06 PHP
php自定义的格式化时间示例代码
Dec 05 PHP
php递归方法实现无限分类实例代码
Feb 28 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
php实现数组重复数字统计实例
Sep 30 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 身份验证方面的函数
2009/10/11 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
js实现左右轮播图
2020/01/09 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
python生成IP段的方法
2015/07/07 Python
python爬虫基本知识
2018/03/05 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
外语专业毕业生个人的自荐信
2013/11/19 职场文书
客服文员岗位职责
2013/11/29 职场文书
音乐学专业求职信
2014/07/22 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书