我真的不确定这是否是正确的方法,因为异常对我来说真的是一个新鲜的主题。是否有可能捕获多个异常(让脚本的执行继续),然后将异常存储在一个数组中,以便能够返回所有引起的异常?
通过这样说,能够使用异常不仅仅是显示一个杀死应用程序的错误(脚本)将是非常棒的
谢谢!
答案 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,恕我直言。