Php 为什么不使用错误数组而不是异常处理?

Php 为什么不使用错误数组而不是异常处理?,php,arrays,Php,Arrays,为什么不使用错误数组而不是抛出错误,并在代码的后面检查它是否为空。。。。异常处理对我来说非常混乱,我无法理解它的用途。。。谁能开导我 他们将其与die()进行比较,认为最好不要停止代码的执行,如果我不想,为什么我要停止代码的执行!?我当然知道 我是一个初学者程序员,这可能也会让你感到困惑,或者是因为我对这个丑陋的东西不是很有经验 请仅在PHP上下文中使用。这实际上取决于您所说的错误类型 我总是死;对于非常严重的错误,例如应用程序无法连接到数据库 但对于任何需要用户输入的内容(如表单),最好使用用

为什么不使用错误数组而不是抛出错误,并在代码的后面检查它是否为空。。。。异常处理对我来说非常混乱,我无法理解它的用途。。。谁能开导我

他们将其与die()进行比较,认为最好不要停止代码的执行,如果我不想,为什么我要停止代码的执行!?我当然知道

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


请仅在PHP上下文中使用。

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

我总是死;对于非常严重的错误,例如应用程序无法连接到数据库

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


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

这取决于您所说的错误类型

我总是死();因为非常严重的错误,比如应用程序无法连接到数据库

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


(如果您想了解更多详细信息,我经常使用数组数组来显示错误,因为一个字段可能有多个错误。例如,如果用户尝试使用用户名“1337”注册帐户,我将使用验证器检查多个条件,它将返回一个数组,其中包含以下内容:用户名长度必须至少为5个字符,“用户名必须至少包含三个字母”,“该用户名已被管理员禁用”,并且所有这些消息将同时显示在该特定字段上方)您决定抛出异常的一个原因是,您可以在控制流中添加跳转,而无需显式语法。这是什么意思

而不是

$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
}
看起来更干净,是吗???这也是一种正式的方式,提醒调用代码,如果您选择在调用堆栈中向上传播异常,它需要处理潜在的错误条件


另外,异常应该用于您不希望发生的代码,例如无法连接到数据库,而不是您确实希望发生的代码,例如用户提交错误数据。另一张海报指出,您可能希望用户在填写表单时出错,这样您就不会在遇到异常时抛出异常s某些数据的用户输入格式不正确,因为您希望用户数据的质量很差。

您决定引发异常的一个原因是,您可以在没有显式语法的情况下在控制流中添加跳转。这是什么意思

而不是

$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
}
看起来更干净,是吗???这也是一种正式的方式,提醒调用代码,如果您选择在调用堆栈中向上传播异常,它需要处理潜在的错误条件


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

有一种方法可以完全编码而不进行异常处理。例如,如果您有一个返回对象长度的方法,如果出现错误,请让它返回-1。这就是大多数C API的构建方式

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

为什么这很有用:你可以有一个DB层,里面有很多抛出异常的逻辑。如果出现问题,你的DB异常处理代码可能会正常失败,向用户显示一条漂亮的错误消息;它还可以向管理员发送一条文本消息,要求注意


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

有一种方法可以完全编码而不进行异常处理。例如,如果您有一个返回对象长度的方法,如果出现错误,请让它返回-1。这就是大多数C API的构建方式

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

为什么这很有用:你可以有一个DB层,里面有很多抛出异常的逻辑。如果那里出了问题,你的DB异常处理代码可能会失败