zoukankan      html  css  js  c++  java
  • 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 }

    输出:

  • 相关阅读:
    java----设计模式--创建型模式(GOF23)
    java----作用域
    java和python对比----实例化的对象属性:
    java----关键字
    java----Java的栈,堆,代码,静态存储区的存储顺序和位置
    java----面对对象
    算法----取0~30不重复的10个整数
    算法----二分查找算法
    织梦 验证码不显示问题
    dedecms 后台修改系统设置,但是config.cache.inc.php文件不能写入
  • 原文地址:https://www.cnblogs.com/dee0912/p/4623379.html
Copyright © 2011-2022 走看看