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中文件上传的安全问题
Oct 09 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
php经典算法集锦
Nov 14 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP微信支付实例解析
Jul 22 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 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
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
Python中对列表排序实例
2015/01/04 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
技术学校毕业生求职信分享
2013/12/02 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
信息技术研修心得体会
2016/01/08 职场文书