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 has encountered an Access Violation 错误的解决方法
Jan 17 PHP
php 提速工具eAccelerator 配置参数详解
May 16 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
php实现转换ubb代码的方法
Jun 18 PHP
PHP中COOKIES使用示例
Jul 26 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 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获取表单textarea数据中的换行问题
2010/09/10 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
php简单统计中文个数的方法
2016/09/30 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
javascript中"/"运算符常见错误
2010/10/13 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
详解Python的单元测试
2015/04/28 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
python 遍历pd.Series的index和value
2019/11/26 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
python属于解释语言吗
2020/06/11 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
静态变量和实例变量的区别
2015/07/07 面试题
两则小学生的自我评价分享
2013/11/14 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
设计师求职信
2014/07/01 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
讨论nginx location 顺序问题
2022/05/30 Servers
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS