zoukankan      html  css  js  c++  java
  • PHP中的错误处理

    错误很常见,比如Notice,Warning等等。此时一般使用set_error_handler来处理:

    <?php
    
    set_error_handler(function($errno, $errstr, $errfile, $errline) {
        var_dump($errno, $errstr, $errfile, $errline);
    });
    
    // Notice: Use of undefined constant strlen
    strlen;
    
    // Warning: strlen() expects exactly 1 parameter, 0 given
    strlen();
    
    ?>
    

    具体能做些什么呢?统一管理错误日志,或者呈现一个相对友好的错误提示页面等等。

    但需要注意的是set_error_handler无法捕捉某些Fatal error,比如下面这个错误:

    <?php
    
    set_error_handler(function($errno, $errstr, $errfile, $errline) {
        var_dump($errno, $errstr, $errfile, $errline);
    });
    
    // Fatal error: Call to undefined function undefined_function()
    undefined_function();
    
    ?>
    

    不过我们真的就一点办法都没有了么?当然不是,我们不仅有办法,而且还有好几种:

    第一种:ob_start + error_get_last

    <?php
    
    ob_start(function($buffer) {
        if ($error = error_get_last()) {
            return var_export($error, true);
        }
    
        return $buffer;
    });
    
    // Fatal error: Call to undefined function undefined_function()
    undefined_function();
    
    ?>
    

    第二种:register_shutdown_function + error_get_last

    <?php
    
    register_shutdown_function(function() {
        if ($error = error_get_last()) {
            var_dump($error);
        }
    });
    
    // Fatal error: Call to undefined function undefined_function()
    undefined_function();
    
    ?>
    

    此外,所有的Parse error(比如说少写了分号之类的错误)都无法捕捉,不过换个角度看,解析错误的代码本身就不应该发布,甚至都不应该进入版本库,关于这一点,我以前写过一篇《Subversion钩子》,里面介绍了如何利用Subversion钩子做代码语法检查。

    转载自 http://huoding.com/2012/05/31/151

  • 相关阅读:
    使用 RestTemplateBuilder.build() 代替 new RestTemplate()
    R2DBC加入Reactive基金会
    Spring Data 2020.0.1 发布
    前后端分离,注册和登录。涉及Oauth2 Password-Flow 授权方式
    OAuth2 Google、Github自定义登录页面
    Authorization-Server入门(二)
    Authorization-Server入门(一)
    Google或Github 登录Web应用​
    使用SpringBoot发送Gmail和QQ邮箱
    理解同步/异步和阻塞/非阻塞的区别
  • 原文地址:https://www.cnblogs.com/dai330713/p/4016047.html
Copyright © 2011-2022 走看看