可以使用自定义异常处理器来处理所有未捕获的异常(没有用 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. 取余运算(codevs 1497)

    题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k为长整型数(2^31范围内). 输入描述 Input Description b p k 输出描 ...

  2. Linux开发cocos2dx程序环境搭建

    安装linux系统,ubuntu 14.04 64位 安装支持软件 sudo apt-get update sudo apt-get install git ssh vim ctags qt-sdk ...

  3. redhat6.2下的ssh密钥免密码登录(原创)

    这个是我自己写的,鼓励转载,请说明转载地址:http://www.cnblogs.com/nucdy/p/5664840.html 在进行hadoop的免密码的登录操作是,老是发生no route等错 ...

  4. UVa 11524:In-Circle(解析几何)

    Problem EIn-CircleInput: Standard Input Output: Standard Output In-circle of a triangle is the circl ...

  5. ThinkPHP的增、删、改、查

    一.创建操作 在ThinkPHP使用add方法新增数据到数据库. 使用方法如下: $User = M()->; $data[););')->delete();

  6. 自定义ContentProvider的一些细节探究

    1.   适用范围 对于什么情况下才会用到自定义的ContentProvider,官方文档的Dev Guide是这样描述的: 如果你想要提供以下的一种或几种特性的时候你才需要构造一个ContentPr ...

  7. coalesce

    coalesce我理解就是将多个partition合并成少量的partition. data.coalesce(2,true) 第一个参数是partition数量 第二个参数是合并是是否进行shuff ...

  8. lr_save_var字符串截取总结

    函数作用: 将一个变化长度的字符串保存到parameter中. 用法实例: 此处讲解函数: Action() {     web_save_timestamp_param("tStamp&q ...

  9. [转载]“浅拷贝”与“深拷贝”

    对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. C++中对象的复制就如同&quo ...

  10. JNI常见错误1

    1, java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "signal" referenced ...