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 相关文章推荐
PHP4和PHP5共存于一系统
Nov 17 PHP
PHP 工厂模式使用方法
May 18 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
PHP随机生成唯一HASH值自定义函数
Apr 20 PHP
php语言的7种基本的排序方法
Dec 28 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
php使用crypt()函数进行加密
Jun 08 PHP
因str_replace导致的注入问题总结
Aug 08 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 PHP
swoole锁的机制代码实例讲解
Mar 04 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中模拟POST传递数据的两种方法分享
2011/09/16 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
python编写爬虫小程序
2015/05/14 Python
Python 处理数据的实例详解
2017/08/10 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
南威尔士家居商店:Leekes
2016/10/25 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
化学学院毕业生自荐信范文
2013/12/17 职场文书
农场厂长岗位职责
2013/12/28 职场文书
干部现实表现材料
2014/02/13 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis