可以使用自定义异常处理器来处理所有未捕获的异常(没有用 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 )自定义异常处理器的更多相关文章

  1. PHP 错误与异常 笔记与总结(10)错误处理器测试

    关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...

  2. PHP 错误与异常 笔记与总结(12 )异常

    ① 异常的概念:异常和错误的区别 PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制.PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念. ② 异常的语法结构 [例1] &l ...

  3. PHP 错误与异常 笔记与总结(13 )自定义异常类

    针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 <?php heade ...

  4. PHP 错误与异常 笔记与总结(18 )页面重定向实现

    在发生错误时,将用户重定向到另一个页面. <?php header('content-type:text/html; charset=utf-8'); class ExceptionRedire ...

  5. PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

    有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) <?php function exception_e ...

  6. PHP 错误与异常 笔记与总结(14 )记录和发送异常信息

    当发生异常时,把异常信息记录到日志文件中: <?php header('content-type:text/html; charset=utf-8'); class LogException e ...

  7. PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中

    [记录错误(生产环境)] php.ini: ① 开启 / 关闭 错误日志功能 log_errors = On ② 设置 log_errors 的最大字节数 log_errors_max_len = 其 ...

  8. PHP 错误与异常 笔记与总结(4)通过 trigger_error 触发 PHP 错误

    [错误抑制符@] 除了 php.ini 中 error_reporting 和 display_errors 的设置.error_reporting() 函数.ini_set() 函数 外,还可以使用 ...

  9. PHP 错误与异常 笔记与总结(1)错误(Deprecated,Notice,Warning)

    [常见的错误类型] ① 语法错误 [例1]程序语句结尾少了';' <?php $username = "dee" //少了分号; echo $username; 输出: ( ...

随机推荐

  1. struts2 <s:property/>标签的使用--输出时间格式转换

    转载地址http://hi.baidu.com/nonyi_com/blog/item/acf1b8d74b6cf63e07088bc4.html 最近在使用struts2的<s:propert ...

  2. android 完美退出所有Activity的demo

    项目地址:https://github.com/libill/myapplication 利用android的wheel和参考android完美退出程序做出来的demo,结束掉所有打开的Activit ...

  3. Android横屏竖屏切换的问题

    Android横屏竖屏切换的问题 http://blog.sina.com.cn/s/blog_77c632410101790w.html

  4. centOS下安装node4.x

    在以前 Node 0.x 的时候,只需要通过 yum install -y nodejs 就可以把 Node 安装好了.但是 yum 安装的 Node 只能安装到 0.10.40 版的,并不能安装到 ...

  5. XmlBeanFactory的Bean加载

    如何使用这些bean,bean加载的探索: MyTestBean bean=(MyTestBean) bf.getBean("myTestBean"); AbstractBeanF ...

  6. POJ3254 Corn Fields(状压DP)

    题目给个n×m的地图,1可以放玉米0不可以,现在要放玉米,玉米上下左右不能相邻,问放法有几种. 当前一行的决策只会影响下一行,所以状压DP之: dp[i][S]表示前i行放完且第i行放玉米的列的集合是 ...

  7. ZOJ1654 Place the Robots(二分图最大匹配)

    最大匹配也叫最大边独立集,就是无向图中能取出两两不相邻的边的最大集合. 二分图最大匹配可以用最大流来解. 如果题目没有墙,那就是一道经典的二分图最大匹配问题: 把地图上的行和列分别作为点的X部和Y部, ...

  8. CodeForces Round 200 Div2

    这次比赛出的题真是前所未有的水!只用了一小时零十分钟就过了前4道题,不过E题还是没有在比赛时做出来,今天上午我又把E题做了一遍,发现其实也很水.昨天晚上人品爆发,居然排到Rank 55,运气好的话没准 ...

  9. python 代码片段14

    #coding=utf-8 #enumerate是一个内置函数 data=(123,'abc',3.14) for i,value in enumerate(data): print i,value

  10. 【POJ】2406 Power Strings

    http://poj.org/problem?id=2406 题意:给定一个字符串 L,已知这个字符串是由某个字符串 S 重复 R 次而得到的,求 R 的最大值.(长度<=1000000) #i ...