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

  • 相关阅读:
    Inno Setup区段之Dirs篇
    Inno Setup区段之Tasks篇
    leetcode刷题-69x的平方根
    7.27 判断子序列
    7.26 矩阵中的最长递增路径
    PMP | 备考笔记
    数据结构--数组存储二叉树(Java)
    数据结构--哈希表(Java)
    查找--斐波那契查找(Java)
    牛客网--字节跳动面试题--特征提取
  • 原文地址:https://www.cnblogs.com/dai330713/p/4016047.html
Copyright © 2011-2022 走看看