应该改变这个并开始使用例外吗?

时间:2012-01-15 20:55:21

标签: php exception

我理解了Exceptions的概念,但我仍然无法理解为什么我应该将我的错误处理方式替换为Exception方式。 这是一个简单的代码,作为我如何毫无例外地做事的一个例子:

validate_form_data($data, &$errors=array())
{
    //expects $_POST to be passed as argument ($data)

    $errors = array();

    if(strlen($data['name']) < 3)
        $errors[] = "Your name must contain at least 3 characters.";

    if($data['age'] > 200)
        $errors[] = "You can't be older than 200."

    if(count($errors))
        return false;
    else
        return true;
}

///submit_form.php

$errors = array();

if(validate_form_data($_POST, $errors))
{
    // do something like sending data to MySQL and output sucess message.
}
else
{
    //loop thru the $errors array and display its values so the user knows what mistakes he made
}

我的问题是:使用例外是否会让我的生活变得更轻松,如果是这样,怎么办?

2 个答案:

答案 0 :(得分:4)

正如其名称所暗示的那样,例外情况应该在您的应用程序中抛出异常情况。但是,由于您所做的是验证数据,因此处理无效数据并不是一个例外情况:这是您期望的条件。因此,在该脚本中使用异常不会使您的生活更轻松,甚至不正确。

我唯一要改变的是你返回错误的方式:

function validate_form_data($data)
{
    $errors = array();

    if (strlen($data['name']) < 3) {
        $errors[] = "Your name must contain at least 3 characters.";
    }

    if ($data['age'] > 200) {
        $errors[] = "You can't be older than 200.";
    }

    return $errors;
}

答案 1 :(得分:0)

我不同意异常意味着意外问题。首先,您的代码专门检查问题,因此它绝对是预期的。根据例外的定义,

  

任何被排除或不符合一般规则,原则,类别等的内容。

它们是已知的案例,必须排除但必须考虑。它们专为需要保留正常执行流程并使非本地处理问题更容易的情况而设计。

如果检测到错误的方法不会处理它,即决定采取什么行动,它可以抛出异常,以便调用者可以处理它或让它传播给它们的调用者,所以上。您可以通过返回错误代码来执行此操作,但这会强制执行堆栈中的每个调用方检查并返回错误代码。如果方法没有捕获它们,PHP会自动重新调用调用者的异常。

由于上述方法的目的是检查用户输入的有效性,因此返回该检查的结果更有意义:是或否。此外,您可能会在调用该方法的代码中使用该结果,因此不需要让异常冒出堆栈。