返回False VS回显错误


Returning False VS echoing out an error

我试图理解从语句中返回false与回显错误之间的主要区别,这两种错误促使用户更正提交。

让我们使用以下函数,该函数用于获取Google Currency Convert API URL并解析另外3个参数$amount, $from, $to。我使用explode来获取API在""中返回的数值。

function currency_convert($googleCurrencyApi, $amount, $from, $to) {
    $result = file_get_contents($googleCurrencyApi . $amount . $from . '=?' . $to);
    $expl = explode('"', $result);
    if ($expl[1] == '' || $expl[3] == '') {
        return false;
    } else {
        return array(
            $expl[1],
            $expl[3]
        );
    }
}

如果陈述是真的,那么返回false与发出建设性信息相比有什么好处?我看到返回错误经常在许多论坛等使用

提前谢谢。

两者都不是,我们在2012年,抛出一个Exception并以您想要的任何方式处理它。

function currency_convert($googleCurrencyApi, $amount, $from, $to) {
    $result = file_get_contents($googleCurrencyApi . $amount . $from . '=?' . $to);
    $expl = explode('"', $result);
    if ($expl[1] == '' || $expl[3] == '') {
        throw new Exception('An error has occured. Describe the error here');
    }
    return array(
        $expl[1],
        $expl[3]
    );
}

Than,当你调用函数时:

try { currency_convert($googleApi, $amount, $from, $to) }
catch (Exception $e) { /* Do whatever you want with $e */ }

在此处阅读有关异常和try-catch块的信息

优点

  • 如果未处理,将停止脚本,快速确定问题所在
  • 如果处理,可以很容易地将其视为发生了return false
  • 异常会中止函数,这意味着return语句永远不会到达
  • 异常可以向用户显示一条建设性消息,这有助于开发人员了解错误所在
  • 异常是其类可以被扩展的对象,因此您可以有效地创建多种类型的错误和异常,例如但不限于:IllegalArgumentExceptionMathExceptionFileReadExceptionReallyAwesomeException,然后以不同的方式处理每个

    try { /* Code Here */ }
    catch (IllegalArgumentException $e) { echo 'Illegal Argument!'; }
    catch (Exception $e) { echo 'General Error! '. $e->getMessage(); }
    

两者之间没有任何优势,这完全取决于如何构建代码。您可以向显示错误的客户端方法返回false。

这一切都与您如何处理返回的值有关。如果为false,则显示"failed",否则显示"success"。

为什么?因为:

  1. 重用代码可以更容易地改变它,也可以改变要做的事情
  2. 你可以做&验证更容易,只需一步
  3. 回显错误在代码端不会是建设性的,只在用户端。返回false对两者都有好处

函数/方法只应在已经达到目的的情况下输出任何内容。举个例子:

错误:

function showSomething($something) {
    $something = doSomething($something);
    echo $something;
}
function doSomething($something) {
    if (empty($something)) {
        echo 'ERROR!';
    }
    return $something;
}

好:

function showSomething($something) {
    $something = doSomething($something);
    if ($something === FALSE) {
        echo 'ERROR!';
    } else {
        echo $something;
    }
}
function doSomething($something) {
    if (empty($something)) {
        return FALSE;
    }
    return $something;
}