【问题标题】:should I use an exception here?我应该在这里使用例外吗?
【发布时间】:2012-04-04 16:49:07
【问题描述】:

我对异常不熟悉,正在尝试找出何时适合使用它们。在以下 php 代码中,我想更改 echo(无需告诉用户)以简单地记录消息。我应该将echo 替换为log->notice(...)(例如)还是应该使用异常(无论如何我都打算记录)。

if (file_exists($file)) {
    echo 'File already exists and will be overwritten.';
}

另外,如果我应该使用异常,那么在这种情况下我该如何正确使用呢?

【问题讨论】:

    标签: php exception exception-handling


    【解决方案1】:

    异常通常用于处理意外行为 - 例如错误或问题。

    在您上面的示例中,我认为它是不需要的,因为您可能期望该文件存在,并且如果那里已经存在文件,则应该真正以流动的方式编写程序(就像您完成了)。这完全取决于您预期会发生什么,而不是。

    正常使用的情况可能是:

    try
    {
        some_function();
    }
    catch (Exception $e)
    {
        echo 'Function didn\'t behave as expected, please try again, here is the error: '.$e->getMessage();
    }
    

    【讨论】:

      【解决方案2】:

      异常是处理错误的标准方法......但它们可能是您需要使用异常的某些情况。

      如果你只是想验证一个文件..不需要异常..如果错误的输出需要你重定向或有连锁反应,或者你正在开发一个框架等......我建议你使用 Exception

      try
      {
          if (file_exists($file)) {
                 throw new Exception('File already exists and will be overwritten.');
          }
      }
      catch (Exception $e)
      {
         header("Location: error?msg=". base64_encode($e->getMessage()));
      }
      

      结论

      您使用脚本的目的将决定您是否更好地使用异常

      我希望这会有所帮助

      谢谢

      :)

      【讨论】:

        【解决方案3】:

        异常是为了在遇到错误时中断执行流程。这完全取决于您如何构建流程,如果您想因为文件存在而停止流程,您可以执行以下操作:

        try {
            if (file_exists($file)) {
                throw new Exception(sprintf('File already exists and will be overwritten';
            }
        
            // If above conditional is realized, no code from this point forward will be
            //  executed
        
        } catch (Exception $e) {
            error_log($e->getMessage());
        }
        

        在您的具体示例中,我认为保持代码不变是可以的,因为它似乎只是一个警告,这意味着您不想中断执行流程,而是在警告后继续执行代码.

        如果你真的想使用异常,你可以实现嵌套异常,但它会变得很复杂,最终会变得矫枉过正。

        通过 PHP 文档了解有关 exceptions 的更多信息。

        我是否应该将 echo 替换为 log->notice(...)

        我愿意,除非你想让用户知道这个问题。

        【讨论】:

          猜你喜欢
          • 2014-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-09
          • 1970-01-01
          • 1970-01-01
          • 2018-10-11
          • 2010-10-08
          相关资源
          最近更新 更多