在数组中存储PHP异常

在数组中存储PHP异常,php,error-handling,exception,Php,Error Handling,Exception,我真的不确定这样做是否正确,因为例外对我来说是一个全新的话题。是否可以捕获多个异常(让脚本继续执行),然后将异常存储在一个数组中,以便能够返回所有导致的异常 话虽如此,但如果能够使用异常来显示杀死应用程序(脚本)的错误,那就太棒了 谢谢 这并不是例外的真正含义。在许多语言中,异常只是可以捕获的对象,然后简单地放入数组中供以后检查,但很可能这是一个糟糕的设计 该机制的名称本身就表明发生了一些需要立即处理的“异常”情况。您可以用它们做更多的事情,而不仅仅是杀死脚本——但San Jacinto说的对,

我真的不确定这样做是否正确,因为例外对我来说是一个全新的话题。是否可以捕获多个异常(让脚本继续执行),然后将异常存储在一个数组中,以便能够返回所有导致的异常

话虽如此,但如果能够使用异常来显示杀死应用程序(脚本)的错误,那就太棒了


谢谢

这并不是例外的真正含义。在许多语言中,异常只是可以捕获的对象,然后简单地放入数组中供以后检查,但很可能这是一个糟糕的设计


该机制的名称本身就表明发生了一些需要立即处理的“异常”情况。

您可以用它们做更多的事情,而不仅仅是杀死脚本——但San Jacinto说的对,将它们存储在阵列中以供以后处理并不是特别好的做法

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

这将向您展示一些使用异常的其他方法,而不仅仅是停止执行


祝你好运

拉里·沃尔(Larry Wall)在他最后一篇《洋葱州》(State of the Onion)的文章中写到了这一点。每个人都希望能够有一个错误抛出/捕获框架。事实上,仅仅依靠框架来处理检查不好的代码是一种糟糕的编码实践。另外,这使得调试变得非常困难

我的建议是,不要这样:

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";
}
# ...
这样,您的堆栈指针就不会在试图查找
异常的处理程序时到处乱跳


PHP试图太像Java,IMHO。

首先,异常处理并不像看上去那么简单,所以您应该在这方面投入一点时间。:-)

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

确保可以捕获多个异常,继续代码执行并将它们存储在数组中,但这没有意义。如果您在当前代码中确实遇到了无法处理的错误(例如突然关闭的套接字等),则可以通过代码中的异常进行处理。规则是:
仅当您可以对异常执行有用的操作或引发另一个异常时,才捕获该异常

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

话虽如此,但如果能 能够对多个异常使用异常 只是显示了一个错误,杀死了 应用程序(脚本)

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

有关一些语法示例,请参见。
关于这个主题的一篇更大的文章发表在了上。

任何中等复杂的应用程序都会因为这个方法而变得指数复杂,当然,除非您所指的异常并不是那么糟糕,实际上应该是警告。缓存(不是“捕捉”,而是“缓存”)它们很容易;以后再处理他们是非常困难的。部分问题在于,您失去了异常发生时的大部分状态。另一个问题是何时处理这些异常的问题。我个人认为你的方法打开了一个蠕虫罐头。嗨,Echox!谢谢你的回复。您有没有关于如何将log4ppp用于阵列的示例?谢谢为什么要将所有内容存储在一个数组中?:-)只需将其记录到文件系统或数据库表中?但是如果您确实需要将“日志”存储到数组中,只需使用$e->getMessage();并将结果字符串存储在数组中。请参阅W3Schools示例中的多个异常和重新引用异常。再次您好!我正在尝试收集从链接操作创建的大量错误/状态消息,并将其与函数结果(真/假)一起发送回用户。尽管如此,通过数据库收集有关数据库连接丢失的错误感觉不太好:)@Industrial,你现在问的和你一开始问的完全不同。存储异常与存储错误消息非常不同。