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 var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
Jun 03 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
php目录拷贝实现方法
Jul 10 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
php中时间函数date及常用的时间计算
May 12 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 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文件中bom的PHP代码
2012/03/13 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
python:socket传输大文件示例
2017/01/18 Python
详解Python pygame安装过程笔记
2017/06/05 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
党的生日演讲稿
2014/09/10 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
培训通知书模板
2015/04/17 职场文书
大国崛起观后感
2015/06/02 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python