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 FPDF类库应用实现代码
Mar 20 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
PHP 查找字符串常用函数介绍
Jun 07 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php数组合并与拆分实例分析
Jun 12 PHP
php数字运算验证码的实现代码
Jul 30 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
php生成验证码函数
2015/10/20 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
php接口隔离原则实例分析
2019/11/11 PHP
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
JavaScript中this详解
2015/09/01 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
js中url对象化管理分析
2017/12/29 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
python操作gmail实例
2015/01/14 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
Python3列表List入门知识附实例
2020/02/09 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
python跨文件使用全局变量的实现
2020/11/17 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
《跨越百年的美丽》教学反思
2014/02/11 职场文书
小学开学典礼主持词
2014/03/19 职场文书
生日主持词
2014/03/20 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
2015年招商引资工作总结
2015/04/25 职场文书