PHP 错误与异常 笔记与总结(16 )自定义异常处理器
可以使用自定义异常处理器来处理所有未捕获的异常(没有用 try/catch 捕获的异常)。
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('测试');
运行后输出:
出现致命错误:没有捕获到异常“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('测试');
运行后输出:
上例中使用 自定义异常处理器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('测试');
输出:
<?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('测试');
输出:
使用自定义异常处理函数以后,程序不会继续向下执行:
<?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...';
输出:
以上是自定义异常处理函数来处理未捕获的异常,同样也可以使用自定义异常处理类来处理未捕获的异常
<?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("测试自定义的异常处理器");
输出:
文件 LogException2.log:
PHP 错误与异常 笔记与总结(16 )自定义异常处理器的更多相关文章
- PHP 错误与异常 笔记与总结(10)错误处理器测试
关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...
- PHP 错误与异常 笔记与总结(12 )异常
① 异常的概念:异常和错误的区别 PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制.PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念. ② 异常的语法结构 [例1] &l ...
- PHP 错误与异常 笔记与总结(13 )自定义异常类
针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 <?php heade ...
- PHP 错误与异常 笔记与总结(18 )页面重定向实现
在发生错误时,将用户重定向到另一个页面. <?php header('content-type:text/html; charset=utf-8'); class ExceptionRedire ...
- PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误
有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) <?php function exception_e ...
- PHP 错误与异常 笔记与总结(14 )记录和发送异常信息
当发生异常时,把异常信息记录到日志文件中: <?php header('content-type:text/html; charset=utf-8'); class LogException e ...
- PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中
[记录错误(生产环境)] php.ini: ① 开启 / 关闭 错误日志功能 log_errors = On ② 设置 log_errors 的最大字节数 log_errors_max_len = 其 ...
- PHP 错误与异常 笔记与总结(4)通过 trigger_error 触发 PHP 错误
[错误抑制符@] 除了 php.ini 中 error_reporting 和 display_errors 的设置.error_reporting() 函数.ini_set() 函数 外,还可以使用 ...
- PHP 错误与异常 笔记与总结(1)错误(Deprecated,Notice,Warning)
[常见的错误类型] ① 语法错误 [例1]程序语句结尾少了';' <?php $username = "dee" //少了分号; echo $username; 输出: ( ...
随机推荐
- 组合数(codevs 1631)
1631 组合数 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 组合数C(N, K)表示 ...
- 一、HTML和CSS基础--HTML+CSS基础课程--第1部分
第一章 HTML介绍 Html和CSS的关系 1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比 ...
- php 面向对象的方式访问数据库
<body> <?php //面向对象的方式访问数据库 //造对象 $db = new MySQLi("localhost","root",& ...
- Java Hour 39 Maven ( 1 )
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 39 Maven 1 Perhaps you are running ...
- poj 1114 完全背包 dp
如果可以每个物品拿多件,则从小到大遍历,否则从大到小遍历. G - Piggy-Bank Time Limit:1000MS Memory Limit:32768KB 64bit IO ...
- 在CentOS下利用Eclipse调试FFmpeg
所需软件 64位软件打包下载链接:http://pan.baidu.com/s/1i3B08Up 密码:o50u https://yunpan.cn/cBKDSbrGDgBvz 访问密码 1f55 ...
- [LintCode] Continuous Subarray Sum II
Given an integer array, find a continuous rotate subarray where the sum of numbers is the biggest. Y ...
- http://jingyan.baidu.com/album/d8072ac47baf0eec95cefdca.html?picindex=4
http://jingyan.baidu.com/album/d8072ac47baf0eec95cefdca.html?picindex=4
- 贪心 HDOJ 4726 Kia's Calculation
题目传送门 /* 这题交给队友做,做了一个多小时,全排列,RE数组越界,赛后发现读题读错了,囧! 贪心:先确定最高位的数字,然后用贪心的方法,越高位数字越大 注意:1. Both A and B wi ...
- HDU4859 海岸线(最小割)
题目大概就是说一个n*m的地图,地图上每一块是陆地或浅海域或深海域,可以填充若干个浅海域使其变为陆地,问能得到的最长的陆地海岸线是多少. 也是很有意思的一道题. 一开始想歪了,想着,不考虑海岸线重合的 ...