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学习之数组值的操作
Apr 17 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
PHP中的错误处理、异常处理机制分析
May 07 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
PHP数组与字符串互相转换实例
May 05 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原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
AngularJS基础知识
2014/12/21 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
python操作excel让工作自动化
2019/08/09 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python request使用方法及问题总结
2020/04/26 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
最新pycharm安装教程
2020/11/18 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
波兰补充商店:Muscle Power
2018/10/29 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
学生干部培训方案
2014/06/12 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
离职信范文
2015/06/23 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏