我试图理解从语句中返回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语句永远不会到达
- 异常可以向用户显示一条建设性消息,这有助于开发人员了解错误所在
异常是其类可以被扩展的对象,因此您可以有效地创建多种类型的错误和异常,例如但不限于:
IllegalArgumentException
、MathException
、FileReadException
、ReallyAwesomeException
,然后以不同的方式处理每个try { /* Code Here */ } catch (IllegalArgumentException $e) { echo 'Illegal Argument!'; } catch (Exception $e) { echo 'General Error! '. $e->getMessage(); }
两者之间没有任何优势,这完全取决于如何构建代码。您可以向显示错误的客户端方法返回false。
这一切都与您如何处理返回的值有关。如果为false,则显示"failed",否则显示"success"。
为什么?因为:
- 重用代码可以更容易地改变它,也可以改变要做的事情
- 你可以做&验证更容易,只需一步
- 回显错误在代码端不会是建设性的,只在用户端。返回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;
}