首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获需求错误+ error_handlers

如何捕获需求错误+ error_handlers
EN

Stack Overflow用户
提问于 2014-12-16 17:00:57
回答 2查看 31关注 0票数 0

我试图使用set_error_handler函数来捕获require错误。

在使用自定义error_handler时,上下文似乎完全关闭,尽管跟踪是正确的。

代码语言:javascript
复制
<?php
function error_handler($errno, $errstr, $errfile, $errline){
    throw new Exception($errstr);
}

set_error_handler('error_handler');


try{
    trigger_error("somethign",E_USER_NOTICE);
}catch(Exception $e){
    echo "I got caught";
}


try{
    require "something/that/does/not/exists.php";
}catch(Exception $e){
    echo "I got caught";
}

可以看到,当我触发第一个错误时,它会触发error_handler,这反过来会抛出一个异常。这是在第一次尝试捕捉。

第二次,我尝试包含一个不存在的文件,再次使用error_handler,但是没有捕获异常。

这里发生什么事情?

我使用的是php 5.5.*

在CLI模式下测试。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-16 17:05:24

只需阅读文档:

require与include相同,除非失败,否则还会产生致命的E_COMPILE_ERROR级别错误。换句话说,它将停止脚本。

(http://php.net/manual/en/function.require.php)

这意味着,当遇到此错误时,脚本执行将被中止。您的自定义错误处理程序将被使用,但throw将被忽略,因为这假设进一步执行,此时不允许执行。

票数 1
EN

Stack Overflow用户

发布于 2014-12-16 17:07:21

重要的是要记住,PHP有两种常见的错误类型

  • 程序运行时会捕获处理错误。
  • 编译错误发生在语法错误或试图做一些不可能的事情时。

在您的示例中,require是一个编译错误。它不会执行您的用户定义的函数,因为它永远不会走那么远。编译器不能包含坏文件并将失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27509952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档