PHP 错误与异常 笔记与总结(16 )自定义异常处理器
2015-07-06 00:43
691 查看
可以使用自定义异常处理器来处理所有未捕获的异常(没有用 try/catch 捕获的异常)。
set_exception_handler():设置一个用户定义的异常处理函数,当一个未捕获的异常发生时所调用函数的名称(回调函数),该函数必须在调用
set_exception_handler() 之前已经定义。该处理函数需要接受一个参数,该参数是一个抛出的异常对象
【例】
运行后输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051735196545466.jpg)
出现致命错误:没有捕获到异常“Exception”。当出现未捕获的异常这种情况时,就可以使用 set_exception_hanlder() 方法:
运行后输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051740454986853.jpg)
上例中使用 自定义异常处理器1 来处理未捕获的异常。
【例2】 当定义了多个 set_exception_handler() 方法时,最后的方法会覆盖之前的方法;而使用 restore_exception_handler() 则会恢复到上一次定义过的自定义处理函数。
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051744422488591.jpg)
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051745448108343.jpg)
使用自定义异常处理函数以后,程序不会继续向下执行:
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051745448108343.jpg)
以上是自定义异常处理函数来处理未捕获的异常,同样也可以使用自定义异常处理类来处理未捕获的异常
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/060035328426728.jpg)
文件 LogException2.log:
set_exception_handler():设置一个用户定义的异常处理函数,当一个未捕获的异常发生时所调用函数的名称(回调函数),该函数必须在调用
set_exception_handler() 之前已经定义。该处理函数需要接受一个参数,该参数是一个抛出的异常对象
【例】
<?php header('content-type:text/html; charset=utf-8'); header('content-type:text/html; charset=utf-8'); function exceptionHandler_1($e){ echo '自定义异常处理器1'; echo '异常信息:'.$e->getMessage(); } function exceptionHandler_2($e){ echo '自定义异常处理器2'; echo '异常信息:'.$e->getMessage(); } throw new Exception('测试');
运行后输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051735196545466.jpg)
出现致命错误:没有捕获到异常“Exception”。当出现未捕获的异常这种情况时,就可以使用 set_exception_hanlder() 方法:
<?php header('content-type:text/html; charset=utf-8'); header('content-type:text/html; charset=utf-8'); function exceptionHandler_1($e){ echo '自定义异常处理器1',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } function exceptionHandler_2($e){ echo '自定义异常处理器2',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } set_exception_handler('exceptionHandler_1'); throw new Exception('测试');
运行后输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051740454986853.jpg)
上例中使用 自定义异常处理器1 来处理未捕获的异常。
【例2】 当定义了多个 set_exception_handler() 方法时,最后的方法会覆盖之前的方法;而使用 restore_exception_handler() 则会恢复到上一次定义过的自定义处理函数。
<?php header('content-type:text/html; charset=utf-8'); header('content-type:text/html; charset=utf-8'); function exceptionHandler_1($e){ echo '自定义异常处理器1',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } function exceptionHandler_2($e){ echo '自定义异常处理器2',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } set_exception_handler('exceptionHandler_1'); set_exception_handler('exceptionHandler_2'); throw new Exception('测试');
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051744422488591.jpg)
<?php header('content-type:text/html; charset=utf-8'); header('content-type:text/html; charset=utf-8'); function exceptionHandler_1($e){ echo '自定义异常处理器1',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } function exceptionHandler_2($e){ echo '自定义异常处理器2',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } set_exception_handler('exceptionHandler_1'); set_exception_handler('exceptionHandler_2'); restore_exception_handler(); throw new Exception('测试');
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051745448108343.jpg)
使用自定义异常处理函数以后,程序不会继续向下执行:
<?php header('content-type:text/html; charset=utf-8'); header('content-type:text/html; charset=utf-8'); function exceptionHandler_1($e){ echo '自定义异常处理器1',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } function exceptionHandler_2($e){ echo '自定义异常处理器2',__FUNCTION__,'<br>'; echo '异常信息:'.$e->getMessage(); } set_exception_handler('exceptionHandler_1'); throw new Exception('测试'); echo 'continue...';
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/051745448108343.jpg)
以上是自定义异常处理函数来处理未捕获的异常,同样也可以使用自定义异常处理类来处理未捕获的异常
<?php class ExceptionHandler{ protected $_exception; protected $_logFile = 'D:/practise/php/Error/LogException2.log'; public function __construct(Exception $e){ //保存异常对象 $this->_exception = $e; } public static function handle(Exception $e){ $self = new self($e); $self->log(); echo $self; } //记录日志方法 public function log(){ error_log($this->_exception->getMessage().PHP_EOL, 3, $this->_logFile); } public function __toString(){ $message = <<<EOF <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>出现异常</h1> <p>请联系管理员</p> </body> </html> EOF; return $message; } } set_exception_handler(array('ExceptionHandler', 'handle'));//处理未捕获的异常。第一个参数类名,第二个参数方法名 //测试 throw new Exception("测试自定义的异常处理器");
输出:
![](http://images0.cnblogs.com/blog2015/534303/201507/060035328426728.jpg)
文件 LogException2.log:
![](http://images0.cnblogs.com/blog2015/534303/201507/060036303738286.jpg)
相关文章推荐
- PHP 错误处理机制
- php导出中文内容excel文件类实例
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
- 详解PHP中的PDO类
- PHP中创建和验证哈希的简单方法实探
- PHP跨域用到的知识
- 整理一些PHP开发安全问题
- php的CI框架中的URI问题
- php安装及配置笔记
- PHP 类的一些知识点
- Laravel 5 的安装
- yii框架学习——1. 安装
- 第6讲 Zend 整合数据库
- thinkphp url重写
- php composer使用过程
- php加速器(XCache),php以模块的形式编译
- php性能分析工具xhprof的安装使用
- Phpmyadmin 扩展功能没有打开的解决办法
- PHP5 session 详解【经典】