PHP异常处理浅析


Posted in PHP onMay 12, 2015

PHP预定了两个异常类:Exception和ErrorException

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 ) //异常追踪信息(array)

    final public string getTraceAsString ( void ) //异常追踪信息(string)

    public string __toString ( void ) //试图直接 将异常对象当作字符串使用时调用子函数的返回值

    final private void __clone ( void ) //克隆异常对象时调用

}
ErrorException  extends Exception  {

 

    /* 属性 */

    protected int $severity   ;

    /* 方法 */

    

    public __construct  ([ string $message  = ""  [, int $code  = 0  [, int $severity  = 1  [, string $filename  = __FILE__  [, int $lineno  = __LINE__  [, Exception  $previous  = NULL    ]]]]]] )

    final public int getSeverity  ( void )

    /* 继承的方法 */

    final public string Exception::getMessage  ( void )

    final public Exception Exception::getPrevious  ( void )

    final public int Exception::getCode  ( void )

    final public string Exception::getFile  ( void )

    final public int Exception::getLine  ( void )

    final public array Exception::getTrace  ( void )

    final public string Exception::getTraceAsString  ( void )

    public string Exception::__toString  ( void )

    final private void Exception::__clone  ( void )

}

那么如何捕获异常?

(1)PHP可用try...catch...捕获异常,进行异常处理的代码必须在try代码块内。

try {

    throw new Exception('exception test 1', 1001);

} catch(Exception $e) {

    echo $e->getMessage().'-'.$e->getCode();

}

(2)用户可以自定义异常处理函数[set_exception_handler],用于没用用try/catch捕获的异常。

function  exception_handler ( $e ) {

    echo  "Uncaught exception: "  ,  $e -> getMessage (),  "\n" ;

}

 

set_exception_handler ( 'exception_handler' );

 

throw new  Exception ( 'Uncaught Exception' );

 

echo "这行不会执行了";

可以看到使用ser_exception_handler回调函数处理异常,后续的代码不会继续执行,但try-catch可以。
(3)PHP可用多catch捕获不同类型异常,并允许在catch代码块内再次抛出异常。

//请根据实际扩展异常类

class MyException extends Exception {

    public function __construct($message = '', $code = 0) {

 

    }

 

    public function myFunction() {

        echo 'just for test';

    }

}

 

try {

    throw new MyException('an error');

} catch (MyException $e) {

    echo $e->myFunction();

} catch (Exception $e) {

    echo $e->getMessage();

}

(4)PHP5.5已经支持finally关键词,你无需关心异常是否溢出了。

PHP异常处理浅析

可对比如下:

function doSomething() {

    $resource = createResource();

    try {

        $result = useResource($resource);

    } catch (Exception $e) {

        releaseResource($resource);

        log($e->getMessage());

        exit();

    }

    releaseResource($resource);

    return $result;

}

 

//使用finally后

function doSomething2() {

    $resource = createResource();

    try {

        $result = useResource($resource);

        return $result;

    } catch (Exception $e) {

        log($e->getMessage());

        exit();

    } finally {

        releaseResource($resource);

    }

}
PHP 相关文章推荐
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
php面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
PHP XML数据解析代码
May 26 PHP
php 函数中使用static的说明
Jun 01 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
php 获取xml接口数据的处理方法
May 31 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
PHP xpath提取网页数据内容代码解析
Jul 16 PHP
php猴子选大王问题解决方法
May 12 #PHP
PHP嵌套输出缓冲代码实例
May 12 #PHP
php实现修改新闻时删除图片的方法
May 12 #PHP
php跨服务器访问方法小结
May 12 #PHP
php一个解析字符串排列数组的方法
May 12 #PHP
PHP获取远程图片并保存到本地的方法
May 12 #PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 #PHP
You might like
PHP.MVC的模板标签系统(三)
2006/09/05 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
PHP文件上传类实例详解
2016/04/08 PHP
php递归函数怎么用才有效
2018/02/24 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
django实现分页的方法
2015/05/26 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
使用python实现knn算法
2017/12/20 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
最新大学生自我评价
2013/09/24 职场文书
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
公司经理任命书
2014/06/05 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
承诺书模板大全
2015/05/04 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js