【问题标题】:What is the difference between (if (x == y) return true, else false) and (if (x != y) return false, else true)?(if (x == y) return true, else false) 和 (if (x != y) return false, else true) 有什么区别?
【发布时间】:2016-05-04 17:04:29
【问题描述】:
if($send != true)
    {
        echo "Error Sending Email: ". $send->message;
        return false;
    }
    else 
    {
        echo "Mail Sent";
        return true;
    }

我现在正在学习 PHP,并且正在努力理解为什么这段代码是这样设置的。上面的代码和这个有什么区别吗:

if($send == true)
    {
        echo "Mail Sent";
        return true;
    }
    else 
    {
        echo "Error Sending Email: ". $send->message;
        return false;
    }

在我看来,他们会做同样的事情,我想不出任何理由为什么要使用一个而不是另一个。这只是偏好,还是我错过了什么?我是一个初学者,所以任何输入将不胜感激。

【问题讨论】:

  • 我喜欢较少的否定,所以会选择第二个。
  • 没有区别;它归结为相同的代码。使用对您来说最易读的那个。
  • 关于测试真理的哲学有一些话要说,其他一切都走虚假的道路,而不是测试虚假和其他一切都走真实的道路。在许多情况下,您需要前者而不是后者。这里的假设是“其他一切”可能包括本身不评估为“假”的案例,您很可能不希望这些案例遵循真实路径。
  • 我更喜欢一开始就进行错误验证,再加上优雅地处理异常。所以像if (!$condition) { throw new \Exception('You done screwed up!') } 这样的东西,然后从那一点继续,没有更多的条件。

标签: php logic


【解决方案1】:

没有区别,大多数情况下你可以做任何你喜欢的事情。

请记住,您无需将boolean valuestruefalse 进行比较,因为它们已经适合这种情况。例如

if ($send) {
    echo "Mail Sent";
    return true;
} else {
    echo "Error Sending Email: ". $send->message;
    return false;
}

你也可以像这样返回$send

if ($send) {
    echo "Mail Sent";
} else {
    echo "Error Sending Email: ". $send->message;
}
return $send;

当你选择使用什么顺序时,我建议考虑哪个更容易阅读和理解。

附言PHP 中的重要主题之一是Type Juggling PHP 自动将不同的类型转换为所需的任何类型。当您进行不同的条件检查时,请阅读并记住这一点。有时这可能很棘手。

p.p.s.有一本很棒的书我的Martin Fowler - Refactoring: Improving the Design of Existing Code 它涵盖了这样的问题 - 如何组织代码,进行条件检查的最佳方法是什么等等。好吧,这不是关于这个主题的唯一一本书,但这是我的第一本想了想。这可能是有争议的,并不是所有人都听从他的建议,但这是你可能想知道的:)

【讨论】:

  • 谢谢!这种类型的杂耍链接非常有用。
【解决方案2】:

我更喜欢先进行错误验证,这样我就不必将错误验证之后的所有内容都包装到自己单独的条件中。

考虑以下几点:

if(!$send) {
    echo "Error Sending Email: ". $send->message;
    return false;
}
echo "Mail Sent";
return true;

对我来说,这更容易阅读,并且在处理多个验证标准时变得更容易管理。只需在开始时输入所有验证标准,您就是金牌(假设当您遇到错误时,您退出该功能)。一旦它通过了所有的验证检查,它就会继续前进。

然而,主要的收获是没有“正确”的答案。这完全是一个偏好问题。

【讨论】:

  • 我也喜欢你的方法。这个想法是首先检查阻塞条件,如果满足前提条件,我们就可以实现业务逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多