首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何才能找出所有可能被PHP代码块抛出的错误?

问我如何才能找出所有可能被PHP代码块抛出的错误?
EN

Stack Overflow用户
提问于 2017-12-24 07:28:11
回答 3查看 165关注 0票数 0

--我想知道,对于动态代码,而不是静态代码,可以抛出哪些错误是我没有捕捉到的。例如,我的代码可能在10年内不引发任何异常而运行,然后抛出UncaughtException。

我想(非一般地)捕捉我使用的方法可以抛出的每一种类型的异常。我如何知道这些方法可能引发哪些异常?

我希望非一般性地捕获每种可能为PHP代码段引发的错误类型。

可能引发的异常示例:

代码语言:javascript
复制
PDOException
ExpiredException

现在我对一切都有了看法:

代码语言:javascript
复制
try{
 ...
}catch(Exception $e){
 ...
}

我想用这样的东西来代替它:

代码语言:javascript
复制
try{
 ...
}catch(PDOException $e){
 ...
}catch(ExpiredException $e){
 ...
}catch(Exception $e){
 ...
}

我希望确信我正在捕获代码部分中的方法可以抛出的所有不同类型的异常。

如果我单独捕捉到所有的例外情况,是否可以安全地移除这部分?

代码语言:javascript
复制
catch(Exception $e){
 ... 
}

或者有一些方法可以简单地抛出异常?

我的解决方案首选项列表(1是最首选的解决方案):

1: --我可以打开的一个标志,它将导致php.exe警告我注意每一种可能的异常类型,而这些异常没有被特别捕获。

2: --一种单独检查每个方法并查看可以抛出哪些错误的方法。文档是检查的唯一方法吗?或者是否有某个IDE或PHP块可以告诉我哪些异常可能被单独的方法抛出?

EN

回答 3

Stack Overflow用户

发布于 2017-12-24 07:41:07

您甚至无需调用try就可以捕获所有异常。

代码语言:javascript
复制
function hello($e)
{
  if ($e instanceof PDOException){
  echo "something".
}else echo $e->getMessage();


}


set_exception_handler('hello');

这应该会捕获所有的异常。

更新2

我已经编辑了代码,以便您知道使用get_class();将引发哪些异常

代码语言:javascript
复制
class mycustomException extends Exception{} // making new exception
function hello($e)
{
    if ($e instanceof PDOException){ // exception already known
        echo "something";
}else{

        echo get_class($e); // get exception name.
    }


}


set_exception_handler('hello');
throw new mycustomException(); // throw exception that we made.
票数 0
EN

Stack Overflow用户

发布于 2017-12-24 07:43:50

如果你说的是例外,你已经有答案了

代码语言:javascript
复制
try{
 ...
}catch(PDOException $e){
 ...
}catch(ExpiredException $e){
 ...
}catch(Exception $e){
   echo get_class($e); // get's the class of unrecorded exceptions.
   //catches any exceptions missed by the above
}

现在,如果您讨论的是“错误”,您可以使用自定义错误处理程序。

代码语言:javascript
复制
  if(!function_exists('myErrorHandler')){
      function myErrorHandler($severity, $message, $file = 'UNKNOWN', $line = 'UNKNOWN')
      {

         throw new ErrorException(
             $message,
             1,
             $severity,
             $file,
             $line
         );
      }

      set_error_handler('myErrorHandler');
 }

它所做的是将所有PHP错误转换为异常,或者更确切地说是将其转换为ErrorExceptoins。

现在,您可以更进一步,使用这两个函数。

函数

和

处理程序

实际上,我正在努力将我所用的东西移植到它自己的独立github项目上。就在我完成我的eJinn项目之后,你可能会对此感兴趣。eJinn被设计为基于配置文件构建异常类,因此每个异常文件可以有一个错误和项目中唯一的错误代码。

票数 0
EN

Stack Overflow用户

发布于 2017-12-24 08:02:05

您可以通过使用register_shutdown_function()来设置回调函数,该函数将在php代码执行的每一端调用。在此回调函数中,可以使用error_get_last()检查是否发生错误。例如:

代码语言:javascript
复制
// Register shutdown function
register_shutdown_function("shutdownTracker");

// Define all error types you want to catch and handle
define('E_FATAL', E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR);

function shutdownTracker() {
    $error = error_get_last(); // This will return empty if no error occurs while executing php code.
    if(!empty($error) && ($error['type'] & E_FATAL)) {
        // Write your code here to handle you error

    }
}

注意:您应该将此代码包含在代码的顶部。

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

https://stackoverflow.com/questions/47958860

复制
相关文章

相似问题

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