1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP中的错误处理

作者:用户 来源:互联网 时间:2017-12-01 17:22:36

程序时间

PHP中的错误处理 - 摘要: 本文讲的是PHP中的错误处理, 程序只要在运行,就免不了会出现错误。或早或晚,只是时间问题罢了。错误很常见,比如Notice,Warning等等。此时一般使用set_error_handler来处理:<?php set_error_handler(function

程序只要在运行,就免不了会出现错误。或早或晚,只是时间问题罢了。
错误很常见,比如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钩子做代码语法检查。
似乎应该顺水推舟接着写点介绍异常的文字才好,可惜时间不早了,还是洗洗睡吧。

 

 

作者 老王

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索程序 时间 ,以便于您获取更多的相关知识。