返回False VS回显错误

时间:2012-02-09 17:20:00

标签: php return-type

我正在尝试理解从声明中返回false的主要区别,而不是回应促使用户更正其提交的错误。

让我们使用以下函数来获取Google货币转换API网址并解析另外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的优点是什么?我看到许多论坛等经常使用的返回false。

提前致谢。

4 个答案:

答案 0 :(得分:5)

我们都在2012年,抛出异常并以任何你想要的方式处理它。

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]
    );
}

比,当你调用函数时:

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

<强> Read about Exceptions and the try, catch block here

优点

  • 如果未处理,将暂停脚本,快速查明问题所在。
  • 如果处理,可以轻松地将其视为发生return false
  • 异常会暂停该函数,这意味着return语句永远不会到达。
  • Exception可以向用户显示建设性消息,开发人员可以查看错误是有帮助的。
  • 例外是其类可以扩展的对象,因此您可以有效地创建多种类型的错误和异常,例如但不限于:{{1 }},IllegalArgumentExceptionMathExceptionFileReadException,然后以不同的方式处理

    ReallyAwesomeException

答案 1 :(得分:1)

一方面没有优势,这完全取决于你如何构建代码。您可以将false返回到显示错误的客户端方法。

关于你对返回值的处理方式。如果为false,则显示“failed”,否则为“success”。

答案 2 :(得分:1)

为什么呢?这是因为:

  1. 重用代码可以更轻松地更改代码,并且可以更改要执行的操作。
  2. 你可以做&amp;验证更容易,一步到位。
  3. 回应错误在代码方面不会是建设性的,只在用户方面。返回假是对两者都有好处。

答案 3 :(得分:1)

函数/方法只应输出任何内容,如果它们已经是它们的用途。举个例子:

为:

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;
}