【发布时间】:2010-04-30 12:04:53
【问题描述】:
我真的不确定这是否是正确的方法,因为异常对我来说确实是一个新鲜的主题。是否可以捕获多个异常(让脚本继续执行),然后将异常存储在数组中以便能够返回所有引起的异常?
话虽如此,能够使用异常来不仅仅是显示杀死应用程序(脚本)的错误会很棒
谢谢!
【问题讨论】:
标签: php error-handling exception
我真的不确定这是否是正确的方法,因为异常对我来说确实是一个新鲜的主题。是否可以捕获多个异常(让脚本继续执行),然后将异常存储在数组中以便能够返回所有引起的异常?
话虽如此,能够使用异常来不仅仅是显示杀死应用程序(脚本)的错误会很棒
谢谢!
【问题讨论】:
标签: php error-handling exception
起初,异常处理并不像看起来那么简单,因此您应该在这方面投入一点时间。 :-)
您应该将异常显式视为您无法在当前代码/函数中处理的错误。如果可以解决问题,则无需抛出和处理异常。
不要将其用作处理预期行为的机制。
当然可以捕获多个异常,继续执行代码并将它们存储在一个数组中,但这没有任何意义。如果您确实遇到当前代码中无法处理的错误(例如突然关闭的套接字等),您可以通过代码中的异常。那么规则是:
只有当你可以用它做一些有用的事情或抛出另一个异常时才捕获一个异常
为了跟踪应用程序中的错误,您应该使用其他技术,而不是将它们存储在数组中并稍后检索它们。使用 Logging(有很好的框架,例如 Log4PHP)来记录小的应用程序错误和警告。
话虽如此,那真是太棒了 能够使用超过 只是显示一个杀死 应用程序(脚本)
只有在您无能为力的情况下,异常才会终止应用程序。同样在大多数情况下,最好在脚本的最高级别捕获所有异常,使用堆栈跟踪记录错误并向用户显示一个很好的错误消息,而不是仅仅“杀死”所有内容。 :-)
有关一些语法示例,请参阅W3Schools PHP Exception Handling。 有关此主题的更大文章发布在Devshed。
【讨论】:
这并不是真正的例外。在许多语言中,异常只是您可以捕获并简单地放入数组中以供以后检查的对象,但这很可能是一个糟糕的设计。
机制的名称表明发生了一些“异常”,您需要立即处理。
【讨论】:
你可以用它们做更多的事情,而不仅仅是杀死脚本 - 但 San Jacinto 说得对,将它们存储在数组中以供以后处理并不是特别好的做法。
也许您应该阅读一下(包括示例,它们会很有用):
http://php.net/manual/en/language.exceptions.php
这应该向您展示一些其他使用异常的方法,而不仅仅是停止执行。
祝你好运!
【讨论】:
Larry Wall 在他的上一篇洋葱状态文章中写到了这一点。每个人都希望能够拥有一个错误抛出/捕获框架。事实是,仅仅依靠框架来处理检查不佳的代码是一种糟糕的编码习惯。另外,它使调试变得非常困难。
我的建议是,而不是这样:
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,恕我直言。
【讨论】: