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初学入门
Nov 19 PHP
phpinfo 系统查看参数函数代码
Jun 05 PHP
PHP 实用代码收集
Jan 22 PHP
php 数组使用详解 推荐
Jun 02 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP实现的json类实例
Jul 28 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
php经典算法集锦
Nov 14 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
PDO::query讲解
Jan 29 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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 autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
JavaScript 图像动画的小demo
2012/05/23 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
Python isinstance函数介绍
2015/04/14 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
python3下pygame如何实现显示中文
2020/01/11 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
乳制品整治工作方案
2014/05/29 职场文书
大学生交通专业求职信
2014/09/01 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
SQL 聚合、分组和排序
2021/11/11 MySQL
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL