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

有两种方式可以在 PHP 中以异常的方式处理错误:

① PHP 内置的 ErrorException类(也是 Exception 类的子类)

 1 <?php
 2 function exception_error_handler($errno, $errstr, $errfile, $errline){
 3     throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
 4 }
 5
 6 set_error_handler(‘exception_error_handler‘);
 7
 8 try{
 9     //出发异常
10     echo gettype();
11 }catch(Exception $e){
12     echo $e->getMessage();
13 }

输出:

用过这种方式把警告信息以异常信息输出出来了。

自定义异常类来处理 PHP 中的错误

 1 <?php
 2 class ErrorToException extends Exception{
 3     public static function handler($errno, $errstr){
 4         throw new self($errstr, $errno);
 5     }
 6 }
 7
 8 set_error_handler(array(‘ErrorToException‘, ‘handler‘));
 9
10 try{
11     //触发错误,未定义的变量,产生通知级别的错误
12     echo $test;
13 }catch(ErrorToException $e){
14     echo $e->getMessage();
15 }

输出:

还可以使用 set_error_handler 设定错误级别:

 1 <?php
 2 class ErrorToException extends Exception{
 3     public static function handler($errno, $errstr){
 4         throw new self($errstr, $errno);
 5     }
 6 }
 7
 8 set_error_handler(array(‘ErrorToException‘, ‘handler‘));
 9 //设定错误级别,例如只有警告级别的错误才以异常的形式进行捕获
10 set_error_handler(array(‘ErrorToException‘, ‘handler‘), E_USER_WARNING|E_WARNING);
11
12 try{
13     //触发错误,未定义的变量,产生通知级别的错误
14     echo $test;
15 }catch(ErrorToException $e){
16     echo $e->getMessage();
17 }

输出:

也就是说,通知级别的错误不交给自定义异常类来处理。

trigger_error 也能触发异常:

 1 <?php
 2 header(‘content-type:text/html; charset=utf-8‘);
 3
 4 class ErrorToException extends Exception{
 5     public static function handler($errno, $errstr){
 6         throw new self($errstr, $errno);
 7     }
 8 }
 9
10 set_error_handler(array(‘ErrorToException‘, ‘handler‘));
11 //设定错误级别,例如至哟哟警告级别的错误才以异常的形式进行捕获
12 set_error_handler(array(‘ErrorToException‘, ‘handler‘), E_USER_WARNING|E_WARNING);
13
14 try{
15     //触发错误,未定义的变量,产生通知级别的错误
16     echo $test;
17     echo ‘<hr>‘;
18     //gettype();
19     echo ‘<hr>‘;
20     trigger_error(‘test‘, E_USER_WARNING);
21 }catch(ErrorToException $e){
22     echo ‘异常‘;
23     echo $e->getMessage();
24 }

输出:

时间: 2024-12-25 23:57:17

PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误的相关文章

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

关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorHandler.php'; error_reporting(-1); set_error_handler(array('myErrorHandler', 'deal')); //通知级别错误 echo $notice; 运行,在 D:\practise\php\From\notice 生成 noticeLo

《深入Java虚拟机学习笔记》- 第17章 异常

<深入Java虚拟机学习笔记>- 第17章 异常

PHP 错误与异常 笔记与总结(16 )自定义异常处理器

可以使用自定义异常处理器来处理所有未捕获的异常(没有用 try/catch 捕获的异常). set_exception_handler():设置一个用户定义的异常处理函数,当一个未捕获的异常发生时所调用函数的名称(回调函数),该函数必须在调用 set_exception_handler() 之前已经定义.该处理函数需要接受一个参数,该参数是一个抛出的异常对象 [例] 1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 head

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

针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 /* 4 自定义异常类 5 */ 6 class MyException extends Exception{ 7 //重写父类构造函数 8 public function __contruct($mess

PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别

[PHP 配置文件中与错误相关的选项 ] 选项 描述 error_reporting 设置错误报告的级别 display_errors 是否显示错误 log_errors 设置是否将错误信息记录到日志或者 error_log 中 error_log 设置脚本错误将记录到的文件 log_errors_max_len 设置 log_errors 的最大字节数 ignore_repeated_errors 是否忽略重复的错误信息 ignore_repeated_source 是否忽略重复错误消息的来源

PHP 错误与异常 笔记与总结(8)自定义错误处理函数 set_error_handler()

通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处理—— 如果使用了该函数,程序会绕过标准的 PHP 错误处理. 摘自:php.net mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) 设置一个用户的函数(erro

PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项

[记录错误(生产环境)] php.ini: ① 开启 / 关闭 错误日志功能 log_errors = On ② 设置 log_errors 的最大字节数 log_errors_max_len = 1024 其他: 选项 描述 log_errors 设置是否将错误信息记录到日志或者 error_log 中 error_log 设置脚本错误将记录到的文件 log_errors_max_len 设置 log_errors 的最大字节数 ignore_repeated_errors 是否忽略重复的错误

Effective C++_笔记_条款08_别让异常逃离析构函数

(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) C++并不禁止析构函数吐出异常,但它不鼓励你这样做.考虑如下代码: 1: class Widget{ 2: public: 3: ... 4: ~Widget() {...} //假设这个可能吐出一个异常 5: }; 6:  7: void doSomething() 8: { 9: vector<Widget> v ; //v在这里被自动销毁 10: ...

C++ Primer笔记2_四种类型转换_异常机制

1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式执行的任何类型转换都可以由static_cast完成 当一个较大的算术类型赋值给较小的类型时,可以用static_cast进行强制转换. 可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全. 无法将const转化为nonconst,这个只有const_cast才可以办得到 举例:

php错误和异常处理笔记

关于php的错误和异常处理的使用最近终于搞清楚了,下面是简要笔记:0.程序处理的原则: 0.首先是中断,即粗暴的停止程序,并且不提供错误信息,在php中就是die()和exit(),只是简单的输出一条消息,比粗暴中断有了一定进步; 1.然后是错误处理,就是在中断基础上增加关于错误的信息,以便调试,就是php中默认的错误处理方式(缺点见下); 2.为了弥补缺点,php允许程序员自定义错误处理函数;1.php自身的错误处理方式对于web用户是不友好的(warning级别的错误不影响后续的程序运行,而