将PHP异常存储在数组中

时间:2010-04-30 12:04:53

标签: php error-handling exception

我真的不确定这是否是正确的方法,因为异常对我来说真的是一个新鲜的主题。是否有可能捕获多个异常(让脚本的执行继续),然后将异常存储在一个数组中,以便能够返回所有引起的异常?

通过这样说,能够使用异常不仅仅是显示一个杀死应用程序的错误(脚本)将是非常棒的

谢谢!

4 个答案:

答案 0 :(得分:11)

首先,异常处理并不像它看起来那么简单,所以你应该投入一点时间。 :-)

您应该将异常显式视为当前代码/函数无法处理的错误。如果您可以解决问题,则无需抛出和处理异常 不要将其用作处理预期行为的机制。

当然可以捕获多个异常,继续执行代码并将它们存储在一个数组中,但这没有意义。如果您确实遇到了当前代码中无法处理的错误(例如突然关闭的套接字等),则会在代码中出现异常。那么规则是:
如果您可以使用它做一些有用的事情或抛出另一个异常

,则只捕获异常

为了跟踪应用程序中的错误,您应该使用其他技术,而不是将它们存储在数组中并稍后检索它们。使用Logging(有很好的框架,例如Log4PHP)来记录轻微的应用程序错误和警告。

  

据说,它会很棒   能够使用超过的例外   只是显示一个杀死它的错误   应用程序(脚本)

异常应该只在你无能为力的情况下终止应用程序。此外,在大多数情况下,最好在脚本中捕获最高级别的所有异常,使用堆栈跟踪记录错误并向用户显示一个很好的错误消息,而不是“杀死”所有内容。 : - )

仅举几个语法示例,请参阅W3Schools PHP Exception Handling。 有关此主题的更大文章发布在Devshed

答案 1 :(得分:6)

这不是真正的例外情况。在许多语言中,异常只是您可以捕获的对象,只需将其推入一个数组中供以后检查,但它确实很糟糕。

该机制的名称表明发生了一些需要立即处理的“例外”。

答案 2 :(得分:2)

你可以用它们做更多的事情,而不仅仅是杀死脚本 - 但是San Jacinto说的是将它们存储在一个数组中以便以后处理是不是特别好的做法。

也许你应该读一下这个(包括例子,它们会很有用):

http://php.net/manual/en/language.exceptions.php

这应该向您展示一些其他方法,您可以使用异常,而不仅仅是停止执行。

祝你好运!

答案 3 :(得分:1)

拉里·沃尔在他最后一篇关于洋葱的文章中写道。每个人都希望能够有一个错误抛出/捕获框架。事实上,仅依靠框架来处理一个检查不佳的代码就变成了糟糕的编码实践。此外,它使调试变得非常困难。

我的建议是,而不是像这样:

try {
    $fh = fopen("foo.txt", 'r');
    if (!$fh) {
       throw new Exception("foo.txt not found");
    }
    # ...
} catch (Exception $e) {
    # report errors
}

只需在消息缓冲区中收集它们:

@errors = array();
if (! (is_file("foo.txt") && $fh = fopen("foo.txt", 'r')) ) {
    $errors []= "foo.txt not found";
}
# ...

这样,您的堆栈指针不会遍布整个地方,试图找到Exception的处理程序。

PHP试图过于像Java,恕我直言。