PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误
有两种方式可以在 PHP 中以异常的方式处理错误:
① PHP 内置的 ErrorException类(也是 Exception 类的子类)
<?php
function exception_error_handler($errno, $errstr, $errfile, $errline){
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
} set_error_handler('exception_error_handler');
try{
//出发异常
echo gettype();
}catch(Exception $e){
echo $e->getMessage();
}
输出:
用过这种方式把警告信息以异常信息输出出来了。
② 自定义异常类来处理 PHP 中的错误
<?php
class ErrorToException extends Exception{
public static function handler($errno, $errstr){
throw new self($errstr, $errno);
}
} set_error_handler(array('ErrorToException', 'handler')); try{
//触发错误,未定义的变量,产生通知级别的错误
echo $test;
}catch(ErrorToException $e){
echo $e->getMessage();
}
输出:
还可以使用 set_error_handler 设定错误级别:
<?php
class ErrorToException extends Exception{
public static function handler($errno, $errstr){
throw new self($errstr, $errno);
}
} set_error_handler(array('ErrorToException', 'handler'));
//设定错误级别,例如只有警告级别的错误才以异常的形式进行捕获
set_error_handler(array('ErrorToException', 'handler'), E_USER_WARNING|E_WARNING); try{
//触发错误,未定义的变量,产生通知级别的错误
echo $test;
}catch(ErrorToException $e){
echo $e->getMessage();
}
输出:
也就是说,通知级别的错误不交给自定义异常类来处理。
trigger_error 也能触发异常:
<?php
header('content-type:text/html; charset=utf-8'); class ErrorToException extends Exception{
public static function handler($errno, $errstr){
throw new self($errstr, $errno);
}
} set_error_handler(array('ErrorToException', 'handler'));
//设定错误级别,例如至哟哟警告级别的错误才以异常的形式进行捕获
set_error_handler(array('ErrorToException', 'handler'), E_USER_WARNING|E_WARNING); try{
//触发错误,未定义的变量,产生通知级别的错误
echo $test;
echo '<hr>';
//gettype();
echo '<hr>';
trigger_error('test', E_USER_WARNING);
}catch(ErrorToException $e){
echo '异常';
echo $e->getMessage();
}
输出:
PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误的更多相关文章
- PHP 错误与异常 笔记与总结(12 )异常
① 异常的概念:异常和错误的区别 PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制.PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念. ② 异常的语法结构 [例1] &l ...
- PHP 错误与异常 笔记与总结(4)通过 trigger_error 触发 PHP 错误
[错误抑制符@] 除了 php.ini 中 error_reporting 和 display_errors 的设置.error_reporting() 函数.ini_set() 函数 外,还可以使用 ...
- PHP 错误与异常 笔记与总结(10)错误处理器测试
关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...
- 《深入Java虚拟机学习笔记》- 第17章 异常
<深入Java虚拟机学习笔记>- 第17章 异常
- PHP 错误与异常 笔记与总结(16 )自定义异常处理器
可以使用自定义异常处理器来处理所有未捕获的异常(没有用 try/catch 捕获的异常). set_exception_handler():设置一个用户定义的异常处理函数,当一个未捕获的异常发生时所调 ...
- PHP 错误与异常 笔记与总结(15 )使用观察者模式处理异常信息
使异常处理变得更灵活.可观察,可以使用设计模式中的观察者模式. 文件 ① 定义观察者的接口 ExceptionObserver.php: <?php /* 给观察者定义的规范 */ interf ...
- PHP 错误与异常 笔记与总结(13 )自定义异常类
针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 <?php heade ...
- PHP 错误与异常 笔记与总结(8)自定义错误处理函数 set_error_handler()
通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处 ...
- PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中
[记录错误(生产环境)] php.ini: ① 开启 / 关闭 错误日志功能 log_errors = On ② 设置 log_errors 的最大字节数 log_errors_max_len = 其 ...
- PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别
[PHP 配置文件中与错误相关的选项 ] 选项 描述 error_reporting 设置错误报告的级别 display_errors 是否显示错误 log_errors 设置是否将错误信息记录到日志 ...
随机推荐
- 【读书笔记】读《JavaScript设计模式》之桥接模式
桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化. 一.使用场景 使用场景一:事件监控 对于前端而言,最典型的使用场景——事件监控.如—— addEvent(element ...
- java单例,懒汉&饿汉
* 单例模式Singleton * 应用场合:有些对象只需要一个就足够了,如皇帝 * 作用: 保证整个应用程序中某个实例有且只有一个 * 区别: 饿汉模式的特点是加载类时比较慢,但运行是比较快 ...
- [转]Java多线程编程的常见陷阱
1.在构造函数中启动线程 我在很多代码中都看到这样的问题,在构造函数中启动一个线程,类似这样: public class A{ public A(){ this.x=1; this.y=2; this ...
- jquery easy ui 1.3.4 窗口,对话框,提示框(5)
5.1.window(窗口) 窗口我们在程序中会大量的使用,比如我们的添加.编辑都可以使用窗口实现,与winform的程序非常的类似.下面的代码是创建一个基本的窗口 $(function () { $ ...
- Java Hour 28 HashSet
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 28 HashSet 为查找而生 LinkedList查找效率低下, ...
- loj 1025(记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25902 #include<iostream> #inc ...
- 在crontab中动态写日志
45 3 * * * setsid script -c /home/dlht/shell/coreBusiness/coreOpt.sh >> /home/dlht/logs/coreO ...
- FZU2219 StarCraft(哈夫曼树)
一个工人可以变成两个工人,这样可以画出一颗二叉树,那么就是在叶子上建的建筑. 问题的时间花费,可以看作是这颗二叉树中各个叶子的深度*k+叶子对应建筑耗费时间中的最大值. 容易想到,类似哈夫曼树一样,从 ...
- 正则表达式学习日记zz
1."."为通配符,表示任何一个字符,例如:"a.c"可以匹配"anc"."abc"."acc": ...
- mergeSort
package POJ; public class Main { /** * * MergeSort * */ public static void main(String[] args) { Mai ...