4

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

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

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

4

3 回答 3

1

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

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

正常使用的情况可能是:

try
{
    some_function();
}
catch (Exception $e)
{
    echo 'Function didn\'t behave as expected, please try again, here is the error: '.$e->getMessage();
}
于 2012-04-04T16:56:27.923 回答
1

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

如果您只想验证文件..不需要异常..如果错误输出需要您重定向或有连锁反应,或者您正在开发框架等...我建议您使用 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()));
}

结论

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

我希望这有帮助

谢谢

:)

于 2012-04-04T17:06:20.847 回答
1

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

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 文档了解有关异常的更多信息。

我应该用 log->notice(...) 替换 echo

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

于 2012-04-04T17:06:52.940 回答