• PHP 处理错误函数


    错误级别

    Fatal Error:致命错误(脚本终止运行)
            E_ERROR         // 致命的运行错误,错误无法恢复,暂停执行脚本
            E_CORE_ERROR    // PHP启动时初始化过程中的致命错误
            E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR
            E_USER_ERROR    // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)
    
        Parse Error:编译时解析错误,语法错误(脚本终止运行)
            E_PARSE  //编译时的语法解析错误
    
        Warning Error:警告错误(仅给出提示信息,脚本不终止运行)
            E_WARNING         // 运行时警告 (非致命错误)。
            E_CORE_WARNING    // PHP初始化启动过程中发生的警告 (非致命错误) 。
            E_COMPILE_WARNING // 编译警告
            E_USER_WARNING    // 用户产生的警告信息
    
        Notice Error:通知错误(仅给出通知信息,脚本不终止运行)
            E_NOTICE      // 运行时通知。表示脚本遇到可能会表现为错误的情况.
            E_USER_NOTICE // 用户产生的通知信息。
    
    
    

    错误显示级别

    // 错误级别
    ERROR = E_ERROR | E_CORE_ERROR |  E_COMPILE_ERROR | E_USER_ERROR | E_PARSE
    error_reporting(E_ALL);//设置异常错误显示等级0为禁止错误
    error_reporting(0);//禁用错误报告
    error_reporting(E_ERROR | E_WARNING | E_PARSE);//报告运行时错误
    error_reporting(E_ALL); //报告所有错误
    error_reporting(E_ALL~E_NOTICE);//除去提醒处理

    Try 和 catch

    使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

     "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。

    1. try catch 捕捉不到fatal error致命错误
    2. 只有抛出异常才能被截获,如果异常抛出了却没有被捕捉到,就会产生一个fatal error
    3. 父类可以捕获子类抛出的异常
    try{   
        // 业务代码
    }catch(Exception $e){
        // 捕获异常,输出错误信息
        echo 'Message: ' .$e->getMessage();
    }

    可以自定义异常类,当必须继承 Exception 类,,捕获 catch 先写子类(级别低的),后写父类(级别高的),try 中可以 嵌套 try{}catch(Exception $e){}

    class customException extends Exception
    {
        public function errorMessage()
        {
            // 错误信息
            $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
            .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
            return $errorMsg;
        }
    }
     
    $email = "someone@example...com";
     
    try{
        // 检测邮箱
        if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
        {
            // 如果是个不合法的邮箱地址,抛出异常
            throw new customException($email); // throw - 里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"。
        }
    }catch (customException $e){
        //输出错误信息
        echo $e->errorMessage();
    }catch(Exception $e)
    {   // 多个异常,先捕获子类的,父类放最后
        echo $e->getMessage();
    }

    PHP异常处理函数

    set_error_handler(error_function,error_types)

    设置用户自定义的错误处理函数。该函数用于创建运行期间的用户自己的错误处理方法。该函数返回旧的错误处理程序,如果失败则返回 NULL。如果存在该方法,相应的error_reporting()就不能在使用了

    参数说明:error_function 

    不仅可以接受函数,还可以接受 类的方法(公开的静态方法 及 公开的非静态方法 都可以),但需要以 数组形式 传递,数组的第一值为“类名”,第二个参数为“方法名”

    error_function(error_level,error_message,error_file,error_line,error_context)

    参数说明:

    error_level 必需的。规定用户自定义的错误的错误报告级别。必须是值数字。可能的错误报告级别详见下面的表格。
    error_message 必需的。规定用户自定义的错误的错误消息。
    error_file 可选。规定发生错误的文件名。
    error_line 可选。规定发生错误的行号。
    error_context 可选。规定指向活跃符号表中发生错误的数组。换句话说,error_context 将包含一个说明每个变量引发错误的存在范围的数组。

    error_level  错误报告级别

    2 E_WARNING 运行时非致命的错误。没有停止执行脚本。
    8 E_NOTICE 运行时的通知。脚本发现可能是一个错误,但也可能在正常运行脚本时发生。
    256 E_USER_ERROR 用户生成的致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR。
    512 E_USER_WARNING 用户生成的非致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING。
    1024 E_USER_NOTICE 用户生成的通知。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE。
    4096 E_RECOVERABLE_ERROR 可捕获的致命错误。这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())。
    class App{
        //error handler function
        function customError($errno, $errstr, $errfile, $errline) {
            echo "<b>Custom error:</b> [$errno] $errstr<br />";
            echo "Error on line $errline in $errfile<br />";
            echo "Ending Script";
            die();
        }
    }
     
    //set error handler
    set_error_handler(array("App","customError"));
     
    $test=2;
     
    //trigger error
    if ($test > 1) {
        trigger_error("A custom error has been triggered");
    }

    register_shutdown_function(callback_function,parameter)

    捕获PHP的错误:Fatal Error、Parse Error等,这个方法是PHP脚本执行结束前最后一个调用的函数,比如脚本错误、die()、exit、异常、正常结束都会调用。通过这个函数就可以在脚本结束前判断这次执行是否有错误产生,这时就要借助于一个函数:error_get_last();这个函数可以拿到本次执行产生的所有错误。error_get_last();返回的信息:
      [type]           - 错误类型
      [message] - 错误消息
      [file]              - 发生错误所在的文件
      [line]             - 发生错误所在的行

    当前函数要在代码执行前执行,否则无法调用。函数没有返回值,如果传入的callback不是可调用的,那么将会产生一个 E_WARNING 级别的错误。

    参数说明:

    callback_function
    待注册的中止回调,中止回调是作为请求的一部分被执行的,因此可以在它们中进行输出或者读取输出缓冲区。

    parameter
    可以通过传入额外的参数来将参数传给中止函数

    register_shutdown_function('zyfshutdownfunc');
    function zyfshutdownfunc()
    {
         if ($error = error_get_last()) {
               echo '输出错误:<b>register_shutdown_function: Type:' . $error['type'] . ' Msg: ' . $error['message'] . ' in ' . $error['file'] . ' on line ' . $error['line'] . '</b>';
          }
    }

    set_exception_handler(exception_function)

    设置默认的异常处理程序,用在没有用try/catch块来捕获的异常,也就是说不管你抛出的异常有没有人捕获,如果没有人捕获就会进入到该方法中,并且在回调函数调用后异常会中止。返回之前定义的异常处理程序的名称,或者在错误时返回 NULL。 如果之前没有定义错误处理程序,也会返回 NULL

    exception_function 参数说明:规定未捕获的异常发生时调用的函数。该函数必须在调用 set_exception_handler() 函数之前定义。这个异常处理函数需要需要一个参数,即抛出的 exception 对象。

    function myException($exception)
    {
         echo "<b>Exception:</b> " , $exception->getMessage();
    }
    
    set_exception_handler('myException');
    
    throw new Exception('Uncaught Exception occurred');  // 定义exception 对象

     提示:在这个异常处理程序被调用后,脚本会停止执行。

  • 相关阅读:
    Windows API—CreateEvent—创建事件
    C++的注册和回调
    Python内置模块-logging
    使用 C++ 处理 JSON 数据交换格式
    Python生成器
    5.Spring-Boot缓存数据之Redis
    6.Spring-Boot项目发布到独立的tomcat中
    7.Spring-Boot自定义Banner
    8.Spring-Boot之SpringJdbcTemplate整合Freemarker
    9.Spring-Boot之Mybatis-LogBack-Freemarker
  • 原文地址:https://www.cnblogs.com/xuey/p/13209567.html
Copyright © 2020-2023  润新知