为什么不使用Array of errors而不是Exception Handling?

时间:2010-03-25 00:36:49

标签: php arrays

为什么不使用错误数组而不是抛出错误并检查代码后面是否为空...异常处理对我来说非常混乱,我无法理解它的目的......任何人都可以启发我!

他们将它与die()进行比较,最好不要停止执行代码,为什么我会停止代码的执行,如果我不想!当然我做了

我是一名初学程序员,也可能会让你感到困惑,或者因为我对这件丑陋的事情不是很有经验。

请仅在PHP的上下文中。

5 个答案:

答案 0 :(得分:4)

您可能决定抛出异常的一个原因是因为您可以在没有明确语法的情况下添加控件流的跳转。这是什么意思?

而不是

$returnVal = doSomeDiskFunction();
if($returnVal == $ERROR_CODEA)
{
    // do some stuff
}
else if( $returnVal == $ERROR_CODEB)
{
    //do some stuff
}

$returnVal = doSomeOtherDiskFunction();
if($returnVal == $ERROR_CODEA)
{
    // do some stuff
}
else if( $returnVal == $ERROR_CODEB)
{
    //do some stuff
}

你可以拥有

try{
   doSomeDiskFunction();
   doSomeOtherDiskFunction();
}
catch(ExceptionTyepA $exceptionA)
{
    //do some stuff
}
catch(ExceptionTypeB $exceptionB)
{
    //do some stuff
}

似乎更清洁,是吗???如果您选择在调用堆栈中向上传播异常,它也是一种警告调用代码的正式方法,它需要处理潜在的错误条件。

此外,异常应该用于期望发生的代码,例如无法连接到数据库,而不是 DO 期望发生的代码,就像用户提交错误数据一样。另一张海报指出,您希望用户填写表单时会出现很多错误,因此当您遇到一些用户输入错误格式的数据时,您不会抛出异常,因为您期望用户数据质量差。

答案 1 :(得分:0)

这实际上取决于你所说的错误类型。

我总是死();对于非常糟糕的错误,例如应用程序无法连接到数据库。

但对于任何需要用户输入的内容,例如表单,最好使用用户可以一次查看的错误数组,而不是一次更正一个字段并反复按提交。

(如果你想更详细地了解,我经常使用数组数组来显示错误,因为一个字段可能有多个错误。例如,如果用户尝试使用用户名注册帐户“ 1337“,我将使用验证器检查多个条件,它将返回一个数组,其中包含”用户名必须至少5个字符长“,”用户名必须包含至少3个字母“,”该用户名已被禁止管理员“和所有这些消息将同时显示在该特定字段上方”

答案 2 :(得分:0)

有一种完全编码的方法,无需异常处理。例如,如果您有一个返回对象长度的方法,如果出现错误,则返回-1。这就是大多数C API的构建方式。

也就是说,当你构建复杂的系统时,你有大量可能表现错误的“黑匣子”代码,异常会有所帮助。异常工作的方式是这样的:当某人“抛出”时,调用堆栈上的人开始收到通知。一步一步来。其中一种方法可以“捕获”异常并处理它。

为什么这很有用:你可以拥有一个内部有很多逻辑的数据库层,它会抛出异常。如果出现问题,您的数据库异常处理代码可能会正常失败,向用户显示一条很好的错误消息;它还可以向管理员发送短信,要求注意。

您甚至可以创建异常处理程序的层次结构:您可以在使用异常处理程序后重新抛出异常。

答案 3 :(得分:0)

PHP的例外很难,但他们仍然有其基本的好处:

  1. Exception提供了有关“出了什么问题?”的更多信息。以更好的形式(例外是一个对象)
  2. 他们让您的代码更清晰
  3. 它们是打破代码部分执行的唯一合理方式(不能按照预期的那样运行),修复(如果可能)需要修复的内容并继续完成而不会完全失败。

答案 4 :(得分:0)

真的取决于语言。 C在这方面类似 - 它不会强迫您处理错误。如果遇到问题,大多数函数返回-1;由你来检查'errno'以查看发生的事情。

但例外情况通常是件好事。如果发生错误,你很少盲目地继续运行(永远不要在Visual Basic中永远不要说“On Error Resume Next”。请。)。如果您确定不需要做任何事情,那么很容易发现异常并且什么也不做。