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 相关文章推荐
JAVA/JSP学习系列之六
Oct 09 PHP
用PHP和MySQL保存和输出图片
Oct 09 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 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 has encountered an Access Violation
2007/01/15 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
人力资源部门的主要职能
2014/02/22 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
道路建设实施方案
2014/03/18 职场文书
关于保护环境的建议书
2014/05/13 职场文书
2014年教育工作总结
2014/11/26 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
实习班主任自我评价
2015/03/11 职场文书