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 }

    输出:

  • 相关阅读:
    zoj3888 找第二大
    zoj3882 博弈
    字典树小总结
    hdu2222 字典树
    hdu1247 字典树
    开放融合 | “引擎级”深度对接!POLARDB与SuperMap联合构建首个云原生时空平台
    阿里HBase高可用8年“抗战”回忆录
    最佳实践 | RDS & POLARDB归档到X-Pack Spark计算
    今日头条在消息服务平台和容灾体系建设方面的实践与思考
    饿了么监控系统 EMonitor 与美团点评 CAT 的对比
  • 原文地址:https://www.cnblogs.com/dee0912/p/4623379.html
Copyright © 2011-2022 走看看