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; 输出: ( ...
随机推荐
- 8.桥接模式(Bridge Pattern)
using System; namespace ConsoleApplication6 { class Program { static void Main(string[] args) { // 创 ...
- 如何使用Linux的Crontab定时执行PHP脚本的方法
我们的PHP程序有时候需要定时执行,我们可以使用ignore_user_abort函数或是在页面放置js让用户帮我们实现.但这两种方法都不太可靠,不稳定.我们可以借助Linux的Crontab工具来稳 ...
- 必须正确理解的---ng指令中的compile与link函数解析
这个绝对是深入的知识,但看完之后,对NG的理解就很利害啦. http://www.ifeenan.com/angularjs/2014-09-04-%5B%E8%AF%91%5DNG%E6%8C%87 ...
- wp8 --未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出
今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目,但是并没有像之前那样顺利的创建页面,而是弹出了一个错误窗口. 我的系统是win8专业版 64位 ,同时 ...
- hdu 4622 **
题意:Suppose there are the symbols M, I, and U which can be combined to produce strings of symbols cal ...
- hdu 3466 排序01背包
也是好题,带限制的01背包,先排序,再背包 这题因为涉及到q,所以不能直接就01背包了.因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m], ...
- 利用Roslyn把C#代码编译到内存中并进行执行
Tugberk Ugurlu在其博文<Compiling C# Code Into Memory and Executing It with Roslyn>中给大家介绍了一种使用.NET下 ...
- 谈谈“色彩空间表示方法”——RGB、YUY2、YUYV、YVYU、UYVY、AYUV
转自:http://bbs.chinavideo.org/viewthread.php?tid=4143 还可参考http://www.fourcc.org/yuv.php 小知识:RGB与YUV-- ...
- Digital Image Processing 学习笔记2
第二章 2.1视觉感知要素 2.1.1 人眼的结构 眼睛由角膜与巩膜外壳.脉络膜和视网膜包围,晶状体由通信的纤维细胞层组成,并由附在睫状体上的纤维悬挂:视网膜上分布两类光感受器(锥状体和杆状体),他们 ...
- .net winform软件自动更新
转载自 http://dotnet.chinaitlab.com/DotNetFramework/914178.html 关于.NET windows软件实现自动更新,本人今天写了一个DEMO,供大家 ...