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 相关文章推荐
php+mysql实现无限级分类 | 树型显示分类关系
Nov 19 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
10个php函数实用却不常见
Oct 13 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
vmware linux系统安装最新的php7图解
Apr 14 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 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脚本的10个技巧(4)
2006/10/09 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
文本加密解密
2006/06/23 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
微信小程序签到功能
2018/10/31 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
盘点提高 Python 代码效率的方法
2014/07/03 Python
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Sanic框架应用部署方法详解
2018/07/18 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
Hotels.com南非:酒店预订
2017/11/02 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
个人简历自荐信
2013/12/05 职场文书
微信营销策划方案
2014/02/24 职场文书
个人委托书怎么写
2014/04/04 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书